Часто говорят, что каждый объект Javascript имеет свойство prototype
, но я считаю, что foo.prototype
имеет значение, только если foo
является функцией.
В Chrome и Firefox obj.__proto__
имеет значение - это указанное свойство prototype
? Но на IE 9 это не сработает (может ли какой-то способ это сделать?), И я подумал о свойстве prototype
, что означает, что obj.prototype
должен работать?
Я понимаю, что Object.getPrototypeOf(obj)
похоже, показывает это свойство prototype
, но зачем нужен специальный метод для его получения? Почему не просто как person.name
, который должен получить свойство name
объекта person
?
Обновление:, кстати, obj.constructor.prototype
выглядит как иногда, но иногда это не так, как в следующем коде, выполненном с использованием прототипального наследования без конструктора: (этот метод содержится в книге "Образцы дизайна Javascript" от Harmes and Diaz от Apress 2008, стр. 46)
var Person = {
name: 'default value',
getName: function() {
return this.name;
}
}
var reader = clone(Person);
console.log(reader.getName());
reader.name = "Ang Lee";
console.log(reader.getName());
function clone(obj) {
function F() {};
F.prototype = obj;
return new F;
}
console.log("the prototype of reader is", Object.getPrototypeOf(reader));
console.log(Object.getPrototypeOf(reader) === reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) == reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) === reader.__proto__);
console.log(Object.getPrototypeOf(reader) == reader.__proto__);
результат будет показывать false, false, true, true для последних 4 строк.