假设我们有以下内容:
function Super() {
// init code
}
function Sub() {
Super.call(this);
// other init code
}
Sub.prototype = new Super();
var sub = new Sub();
Run Code Online (Sandbox Code Playgroud)
然后,在我们ocde的其他部分,我们可以使用以下任一方法来检查关系:
sub instanceof Super;
Run Code Online (Sandbox Code Playgroud)
要么
Super.prototype.isPrototypeOf( sub )
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我们都需要同时拥有对象(sub)和父构造函数(Super).那么,你有没有理由使用其中一个?还有其他一些区别更明确的情况吗?
我已经仔细阅读了2464426,但没有找到足够具体的答案.
aps*_*ers 36
想象一下,您不在代码中使用构造函数,而是使用Object.create生成具有特定原型的对象.您的程序可能被架构为根本不使用构造函数:
var superProto = {
// some super properties
}
var subProto = Object.create(superProto);
subProto.someProp = 5;
var sub = Object.create(subProto);
console.log(superProto.isPrototypeOf(sub)); // true
console.log(sub instanceof superProto); // TypeError
Run Code Online (Sandbox Code Playgroud)
在这里,您没有要使用的构造函数instanceof.你只能使用subProto.isPrototypeOf(sub).
Sco*_*yet 11
使用构造函数时,它几乎没有什么区别. instanceof也许是一点点清洁.但是当你不......时:
var human = {mortal: true}
var socrates = Object.create(human);
human.isPrototypeOf(socrates); //=> true
socrates instanceof human; //=> ERROR!
Run Code Online (Sandbox Code Playgroud)
所以isPrototypeOf更一般.
| 归档时间: |
|
| 查看次数: |
12168 次 |
| 最近记录: |