由于doOtherStuff
函数直接在b
实例上定义,而不是在原型链中的“上方”(例如在base
甚至Object
上),为什么b.hasOwnProperty('doOtherStuff')
会返回false?
var base = (function () {
var cls = function () { };
cls.prototype.doStuff = function () {
console.log('dostuff');
};
return cls;
})();
var child = (function () {
var cls = function () {
base.call(this);
};
cls.prototype = Object.create(base.prototype);
cls.prototype.constructor = child;
cls.prototype.doOtherStuff = function () { // <--
console.log('doOtherStuff');
}
return cls;
})();
var b = new child();
console.log(b.hasOwnProperty('doOtherStuff'), 'doOtherStuff' in b); //false true
答案 0 :(得分:3)
由于
上定义doOtherStuff
函数直接在b
实例
那不是真的;您在cls.prototype
。
hasOwnProperty()
(或this.property = ...
), b.property
将仅返回true。
答案 1 :(得分:1)
doOtherStuff
未直接在b
上定义,b
从其原型继承doOtherStuff
。 hasOwnProperty
区分直接在对象上定义的属性与从原型继承的属性,而in
则没有。