【问题标题】:Add value using prototype in function instance [duplicate]在函数实例中使用原型添加值[重复]
【发布时间】:2015-03-06 09:34:50
【问题描述】:

我的代码中有一个构造函数。我已经创建了该构造函数的实例。在新创建的实例中,我想通过使用原型方法来添加价值或功能。但是我在执行此操作时遇到错误。这是我的代码fiddle

function a(){
this.d=9
}
a.prototype.one=1;
a.prototype.two=2;


var j= new a();
j.prototype.three=3;

console.log(j)

【问题讨论】:

  • In newly created instance I want to add value or function by using prototype method. - 为什么?
  • 您混淆了 Function 对象的默认 prototype 属性和所有用于继承的对象的内部 [[Prototype]] 引用其构造函数的 prototype
  • @RobG:我认为你是对的
  • 不幸的是,“原型”一词被通俗地用于两者。 ECMAScript 使用[[Prototype]] 作为内部属性,但是读写起来很别扭。除了“internal prototype of an instance”之外,一定有更好的名字。

标签: javascript


【解决方案1】:

它应该是构造函数的原型,而不是这个函数产生的对象:

a.prototype.three = 3;

您不能使用prototype 键访问对象的原型,因为原型引用不会像这样暴露。您可以使用 __proto__ 属性来完成此操作,但这已被弃用。如果需要获取对象的原型,可以使用Object.getPrototypeOf 方法:

Object.getPrototypeOf(j) === a.prototype; // true

这里有点令人困惑,因为“原型”这个词有两个意思。函数原型是在构造新对象时使用的对象,当函数像构造函数一样使用时。对象原型是对存储继承方法的对象的引用。

【讨论】:

    【解决方案2】:

    J的原型是未定义的,因为不能直接访问,所以不能直接将属性三设置为j的原型。

    这就是为什么您可以将属性添加到a's 原型但不能添加到j's 原型,您可以尝试

    j.three=3; 
    

    a.prototype.three = 3;

    小提琴http://jsfiddle.net/s4g2n453/4/

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多