-
模块化 这样 prop 和 func 将不会泄露到全局作用域,实现封装查看全部
-
通过defineProperty,seal来控制属性的读写和枚举等查看全部
-
JS没有机制支持抽象类,但是可以自己模拟。 在函数构造器中抛出异常,防止其被直接调用。 自定义一些方法(即希望所有继承该抽象类的类都能拥有的方法)。 对于想要子类去覆盖,但是又不想让直接调用的方法,可以同样通过抛出异常的方式实现。查看全部
-
链式调用 return this查看全部
-
初始化继承自基类的部分:Person.call(this. name); 当子类的方法覆盖了基类的方法时,可能希望调用基类中被覆盖的方法 Person.prototype.init.apply(this, arguments);查看全部
-
模拟重载 通过判断实际传入的参数的个数实现模拟的重载。 因为 typeof null 返回 'object',因此再判断 args[0]查看全部
-
实现继承的方式 1:不可以,因为子类有一些自己的方法和属性。如果用这种方式实现继承关系,那么一旦改变 Student.prototype 就会同时改变 Person.prototype。 2:可以实现继承,但是问题是调用了构造函数从而创建了实例(name, age 无法传参,不具意义),因为Student是一个类,还没有实例化。 3:较为理想,问题在于 Object.create 是ES5之后才支持的。ES5之前可以自己写模拟的一个方法。查看全部
-
instanceof 左边要求是一个对象,右边要求是一个函数/构造器。 它会判断右边这个构造器的 prototype 属性是否出现在左边对象的原型链上。 Student.prototype=new Person(),实现继承的另一种方法。 bosn.__proto__ 指向 Student.prototype; bosn.__proto__.__proto__ 指向 Person.prototype 因此 bosn instanceof Student 或者 bosn instanceof Person 都返回 true查看全部
-
严格模式跟通常模式的区别查看全部
-
内置构造器的 prototype 比如 Object, Number, Boolean, Function(Function.prototype 包含 bind, apply, call 等方法)。 修改内置构造器的 prototype 会带来边际效应(可以通过 Object.defineProperty 设置属性标签来避免)。查看全部
-
改变 prototype 如果改变 prototype 上的属性,所有已创建的实例都会受到影响。 如果改变 prototype,已创建的实例不受影响,新创建的实例会跟着变化。(类似指针)查看全部
-
一般对象的原型都会指向 Object.prototype。 特例: 并不是所有对象的原型链上都会有 Object.prototype,比如var obj=Object.create(null); 并不是所有函数对象都会有prototype属性,bind 函数(用来给函数绑定this)查看全部
-
运算符的优先级查看全部
-
Person 函数直接调用时,this 指向全局对象(在浏览器里指向 window),因此会增加两个全局变量name和age。 Person 函数如果作为构造器调用时,this 会指向一个原型为 Person.prototype 的空对象,并通过 this.name 给这个空对象赋值后,return this。 通过 Person.prototype.hi=function(){}来创建所有 Person 实例共享的方法,同理可以创建所有实例共享的属性。 Student.prototype=Object.create(Person.prototype);实现继承关系。 Student.prototype.constructor=Student;查看全部
-
prototype属性和原型的区别: 函数Foo创建默认会有prototype属性,并默认有两属性:constructor:Foo;__proto__:Object.prototype. prototype会在函数构造实例的时候成为新构造的实例的原型。查看全部
举报
0/150
提交
取消