在对象上找不到 JavaScript 原型方法
JavaScript Prototype method not found on object
根据我所读到的内容,如果在对象上找不到属性或方法,则会在对象的原型上进行搜索。在下面的示例中,我创建了一个对象。然后将该对象的原型分配给对象文本。我现在能够访问对象原型的方法。但无法访问对象上的相同内容。为什么会这样?
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();
然后将该对象的原型分配给对象文本。
不,你没有。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);
}
});
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 如何从构造函数中调用js原型方法
- Javascript不调用原型方法
- 有没有任何情况下,一个方法不应该是原型方法
- 调用影子原型方法的更简单/更好的方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 构造 JavaScript Array 原型方法
- 在Javascript中扩展继承的原型方法
- 如何在另一个原型中创建可调用的原型方法
- 覆盖原型方法
- 实现原型方法
- 从原型方法更改实例属性
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 避免在外部称为原型方法中丢失对象实例
- 原型方法不是一个函数,为什么
- 是否可以从 javascript 中的原型方法访问私有类属性
- 找不到 Javascript 原型方法覆盖
- 调用本机原型方法时扩展或继承对象原型