获得徽章 7
- isPrototypeOf()回答的问题是:在a的整条[[prototype]]链中是否出现过Foo.prototype。Foo.prototype.isPrototypeOf(a);//true评论点赞
- instanceof操作符的左操作数是一个普通的对象,右操作数是一个函数。instanceof回答的问题是:在a的整条[[prototype]]链中是否有指向Foo.prototype的对象。评论点赞
- ES6添加了辅助函数Object.setPrototypeOf(),可以用标准并且可靠的方法来修改关联。
例如我们要把Bar.prototype关联到Foo.prototype:
Bar.prototype = Object.create(Foo.prototype);
Object.setPrototypeOf(Bar.prototype,Foo.prototype);展开评论点赞 - 可以给Foo.prototype添加一个.constructor属性,不过这需要手动添加一个符合正常行为的不可枚举属性。
Object.defineProperty(Foo.prototype,'constructor',{
enumerable:false,
writable:true,
configurable:true,
value:Foo
});展开赞过评论1 - Foo.prototype的.constructor属性只是Foo函数在声明时的默认属性。如果你创建了一个新对象并替换了函数默认的.prototype对象引用,那么新对象并不会自动获得.constructor属性。赞过11
- 函数本身并不是构造函数,然而,当你在普通的函数调用前面加上new关键字之后,就会把这个函数调用变成一个'构造函数调用'。实际上,new会劫持所有普通函数并用构造对象的形式来调用它。评论点赞