Наследование имущества с использованием объектов и прототипов - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок в JS, и в одном из моих тестов я пытался выяснить, как работает следующий код с точки зрения наследования свойств.

function doSomething(){}

doSomething.prototype.foo = "bar"; //Add "foo" property to doSomething's prototype
let anInstance = new doSomething();
anInstance.prop = "value"; //Add "prop" property to object "anInstance"
doSomething.prop = "another value"; //Add "prop" property to "doSomething"
let anotherInstance = new doSomething();

console.log(doSomething.prop);
console.log(anInstance);
console.log(anotherInstance.prop);

Это вывод сценария вышев консоли:

another value

doSomething{prop: "value"}
  prop: "value"
  __proto__:
    foo: "bar"
    constructor: ƒ doSomething()
    __proto__: Object

undefined

Как видите, печать свойства doSomething prop после добавления к нему возвращает ожидаемое another value, но доступ к anotherInstance 'prop возвращаетundefined.

Разве это anotherInstance не должно "наследовать" такое свойство prop, поскольку оно определено в функции, из которой оно было создано?

Заранее спасибо.

1 Ответ

0 голосов
/ 21 ноября 2018

Добавление свойства в функцию - это не то же самое, что добавление свойства в объект-прототип функции.Экземпляры функции наследуют свойства prototype функции, а не собственные свойства функции:

function doSomething(){}

doSomething.prototype.foo = "bar"; //Add "foo" property to doSomething's prototype

doSomething.prop = "another value"; //Add "prop" property to "doSomething" but no the prototype

let anotherInstance = new doSomething();

// only has foo:
console.log(doSomething.prototype)

// this is the object it will inherit from
// only has foo
console.log(Object.getPrototypeOf(anotherInstance))

//they are the same object:
console.log(doSomething.prototype === Object.getPrototypeOf(anotherInstance))

В приведенном выше коде doSomething.prop является просто свойством функции и не играет роли в наследовании прототипа.

...