Проверьте это здесь: http://jsfiddle.net/UCmW8/
var Person = function(name) {
this.name = name;
}
Person.prototype.sayHi = function() {
alert(this.name + ' says hi!');
};
var matt = new Person('Matt');
matt.sayHi() // alerts 'Matt says hi!'
console.log('matt.prototype', matt.prototype);
console.log('Object.getPrototypeOf(matt)', Object.getPrototypeOf(matt));
console.log('Person.prototype', Person.prototype);
console.log('Object.getPrototypeOf(Person)', Object.getPrototypeOf(Person));
Что это производит?
Первый matt.prototype
является undefined
. Функции имеют объект-прототип, и когда эта функция используется как конструктор, экземпляры получают возможность использовать ее свойства, но экземпляры не имеют собственного свойства prototype
.
Object.getPrototypeOf(matt)
находит настоящий прототип. И, как вы можете видеть, это то же самое, что и Person.prototype
. Он позволяет получить прототип без ссылки на функцию построения.
Наконец, если мы попробуем Object.getPrototypeOf(Person)
, мы получим что-то странное. Наша конструкторская функция, в конце концов, является функцией. Подумайте о функциях, которые вы создаете в качестве экземпляров некоторого конструктора Function
, с его собственным прототипом. Таким образом, вы выбираете объект-прототип всех функций, когда вы это делаете.
Что случилось с прототипом f? – Andrew
Существует разница между теми, которые можно проверить с помощью 'f.prototype! = Object.getPrototypeOf (f)'. 'f.prototype' - это объекты Prototype, созданные с помощью' new f() 'get, но это не protoype f – keppla
Взгляните на [documentation] (https://developer.mozilla.org/en-US/docs/JavaScript/Справочник/Global_Objects/Объект/getPrototypeOf). 'f .__ proto__ === Object.getPrototypeOf (f)'. Кстати, вы пытаетесь что-то сделать с 'prototype' или просто интересно о них? –