Свойство прототипа и конструктора в JS - PullRequest
1 голос
/ 03 марта 2012

Ниже приведен фрагмент кода. Может ли кто-нибудь объяснить, почему a.hasOwnProperty("prototype") является верным, а другие ложными? Означает ли это, что функция имеет свой собственный прототип, остальные наследуются от Object? Если да, то почему c.hasOwnProperty("prototype") имеет значение false? Кроме того, откуда берется свойство их constructor? Спасибо

    var a = function () {
    };
    var b = new String("test");
    var c = {};

    console.log(a.hasOwnProperty("prototype"));//true
    console.log(b.hasOwnProperty("prototype"));//false
    console.log(c.hasOwnProperty("prototype"));//false
    console.log(a.hasOwnProperty("constructor"));//false
    console.log(b.hasOwnProperty("constructor"));//false
    console.log(c.hasOwnProperty("constructor"));//false
    console.log(a.constructor);//Function()
    console.log(b.constructor);//String()
    console.log(c.constructor);//Object()

1 Ответ

3 голосов
/ 03 марта 2012

Свойство prototype доступно только для функции конструктора.«а» является функцией и, следовательно, имеет прототип.«b» и «c» являются экземплярами.У них нет прототипов, у их конструкторов есть прототипы:

console.log(a.constructor.hasOwnProperty("prototype")) // true
console.log(b.constructor.hasOwnProperty("prototype")) // true
console.log(c.constructor.hasOwnProperty("prototype")) // true
...