根据我的阅读,如果在对象上找不到属性或方法,则会在对象的原型上进行搜索。在下面的示例中,我创建了一个对象。然后将该对象的原型分配给对象文字。我现在可以访问对象原型的方法。但无法访问相同的对象。为什么这样?
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();Run Code Online (Sandbox Code Playgroud)
然后将该对象的原型分配给对象文字。
不,你没有。该prototype属性仅对(构造函数)函数对象具有特殊含义:
function Constr() {}
Constr.prototype.foo = 42;
var instance = new Constr();
console.log(instance.foo); // 42
console.log(Object.getPrototypeOf(instance) === Constr.prototype); // true
Run Code Online (Sandbox Code Playgroud)
在您的情况下,将prototype属性分配给object,它只是一个没有特殊含义的普通属性。您可以通过运行来验证这一点Object.getPrototypeOf(functionMaster)。它将返回null。
但无法访问相同的对象。为什么这样?
该对象根本没有原型,因为您将其显式设置为null. 你要么想要
var functionMaster = Object.create({
printVal: function() {
console.log('Hello test');
},
printNo: function(num) {
console.log(num);
}
});
Run Code Online (Sandbox Code Playgroud)
或者
Object.setPrototypeOf(functionMaster, {
printVal: function() {
console.log('Hello test');
},
printNo: function(num) {
console.log(num);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |