对父原型的更改会为子项添加属性

时间:2014-07-25 18:32:20

标签: javascript prototypal-inheritance

前言

我有一个对象,我们称之为'A'。我通过A.__proto__.AsDf = -1;向它的原型添加了一个函数。现在'A'的所有孩子也有'AsDf === -1`的属性。

我一直在阅读,我想我明白了发生了什么,但我希望得到一些确认,也许还有更多关于它如何运作的信息(假设并非全部都有)。

问题:

  • 这是因为A.__proto__是对象,这意味着我正在添加'AsDf = -1;'所有对象?
  • 另外,如果是这种情况,那么在创建一个与'A'相同的新对象和使用除Object之外的原型的情况下做一些事情会使它只添加'AsDf'而不是它的子节点吗? (假设所有孩子都是对象,当然不是新对象)。

1 个答案:

答案 0 :(得分:3)

  1. 请勿通过__proto__A.constructor.prototype(如果有)或Object.getPrototypeOf(A)
  2. 如果Object.getPrototypeOf(A) === Object.prototype,则此处设置属性意味着每个对象都会继承它们
  3. 您是如何创建A的?做A = Object.create({});可能会更好,为自己提供一个可以安全使用的原型
  4. 如果A对象而不是功能,您如何拥有“{1}}的”孩子“?你的意思是child = A.someProperty = {};

  5. 使用Object.create({})

    的示例
    var A = Object.create({});
    A.foo; // undefined
    Object.getPrototypeOf(A).foo = 'bar';
    A.foo; // "bar"
    A.fizz = {};
    A.fizz.foo; // undefined
    // but note that because fizz was made with {} we have
    Object.getPrototypeOf(A.fizz) === Object.prototype; // true
    // even though we made it so that
    Object.getPrototypeOf(A) === Object.prototype; // false
    // i.e. the only relation between them is the property reference