在对象上找不到 JavaScript 原型方法

JavaScript Prototype method not found on object

本文关键字:原型 方法 JavaScript 找不到 对象      更新时间:2023-09-26

根据我所读到的内容,如果在对象上找不到属性或方法,则会在对象的原型上进行搜索。在下面的示例中,我创建了一个对象。然后将该对象的原型分配给对象文本。我现在能够访问对象原型的方法。但无法访问对象上的相同内容。为什么会这样?

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);
  }
});