猿问

isPrototypeOf()方法的含义?

JavaScriptJavaScript高级程序设计148页这样描述指针[[prototype]]:
当构造函数创建一个新实例后,该实例内部包含一个指针(内部属性),指向构造函数的原型.ECMA-262第五版管这个指针叫做[[prototype]].虽然在脚本中没有标准的方式访问它,但在Firefox,Safari,Chrome中提供了(__proto__).
149页第一次出现,书中这样写道:
虽然在所有实现中都无法访问[[prototype]],但可以通过isPrototypeOf()方法来确定对象之间是否存在这种关系.从本质上讲,如果[[prototype]]指向调用isPrototypeOf()方法的对象,那么这个方法就返回true
那么看下面的代码
JavaScriptfunctionSuperType(){
this.property=true;
}
SuperType.prototype.getSuperValue=function(){
returnthis;
};
functionSubType(){
this.subproperty=false;
}
SubType.prototype=newSuperType();
SubType.prototype.getSubValue=function(){
returnthis.subproperty;
};
varinstance=newSubType();
alert(SuperType.prototype.isPrototypeOf(instance));//true
alert(instance.__proto__==SuperType.prototype)//false
第一个alert为true按照149页描述的,那么instance是指向SuperType.prototype的,可是我们这样测试的时候却alert出的是false,又表示instance的[[prototype]]并不指向SuperType.prototype.这不矛盾吗?
白猪掌柜的
浏览 342回答 2
2回答

翻阅古今

isPrototypeOf和proto不等价,那书上也说了,可以通过isPrototypeOf()方法来确定对象之间是否存在这种关系.这个关系就是原型链的关系,isPrototypeOf是判断a是否存在于b的原型链这么一个关系,所以是这样javascriptinstance.__proto__===SubType.prototypeinstance.__proto__.isPrototypeOf(instance)SubType.prototype.__proto__===SuperType.prototypeinstance.__proto__.__proto__===SuperType.prototypeinstance.__proto__.__proto__.isPrototypeOf(instance)明白了么?这个原型链一直往上面,都在instance的原型链里,所以都是true。

繁花不似锦

当构造函数创建一个新实例后,该实例内部包含一个指针(内部属性),指向构造函数的原型你通过varinstance=newSubType();创造了SubType的实例instanceinstance.__proto__//SuperType{property:true,getSu...instance//SubType{subproperty:false,property:true...所以instance.__proto__===SubType.prototype//trueinstance.__proto__.__proto__===SuperType.prototype//true这种想象叫做原型链。举个例子:你去一个古老的山村家族找一个人,你先问孩子辈的人是否认识,可能他们太年轻,不认识;于是你去问他们的父母,是否认识,可能他们也不认识;然后你就要问他们的爷爷奶奶,是否认识。。。js会顺着原型链向上寻找,会有两种结果:-找到了,返回或修改-没找到,返回undefined
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答