根据我的阅读,如果在对象上找不到属性或方法,则在对象的原型上搜索。在下面的例子中,我创建了一个对象。然后将该对象的原型分配给对象文字。我现在能够访问对象原型的方法。但是无法访问对象上的相同内容。为什么这样?
var functionMaster = Object.create(null);
//assign proto to below object literal
functionMaster.prototype = {
printVal: function() {
console.log('Hello test');
},
printNo: function(num) {
console.log(num);
}
}
//Works as expected
functionMaster.prototype.printVal();
//Doesnt find PrintVal() method
functionMaster.printVal();

答案 0 :(得分:4)
然后将该对象的原型分配给对象文字。
不,你没有。 prototype
属性在(构造函数)函数对象上只有特殊含义:
function Constr() {}
Constr.prototype.foo = 42;
var instance = new Constr();
console.log(instance.foo); // 42
console.log(Object.getPrototypeOf(instance) === Constr.prototype); // true
在您的情况下,将prototype
属性分配给对象,它只是一个没有特殊含义的普通属性。您可以通过运行Object.getPrototypeOf(functionMaster)
来验证这一点。它将返回null
。
但无法在对象上访问相同内容。为什么这样?
由于您明确将对象设置为null
,因此该对象根本没有原型。你要么
var functionMaster = Object.create({
printVal: function() {
console.log('Hello test');
},
printNo: function(num) {
console.log(num);
}
});
或
Object.setPrototypeOf(functionMaster, {
printVal: function() {
console.log('Hello test');
},
printNo: function(num) {
console.log(num);
}
});