В Javascript разница между & #39;Object.create& #39; и & #39;новые& #39;

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

На странице Дугласа Крокфорда Прототипное наследование в JavaScript он говорит

В прототипной системе объекты наследуются от объектов. JavaScript, однако отсутствует оператор, выполняющий эту операцию. Вместо этого имеет новый оператор, такой что new f ()производит новый объект, который наследуется от f.prototype.

Я не совсем понял, что он хотел сказать этим предложением, поэтому провел несколько тестов. Мне кажется, ключевое отличие в том, что если я создаю объект на основе другого объекта в чистой прототипной системе, то все родительские члены-родители должны быть на прототипе нового объекта, а не на самом новом объекте.

Вот тест:

var Person = function(name, age) {
        this.name = name;
        this.age = age;
}
Person.prototype.toString = function(){return this.name + ', ' + this.age};

// The old way...
var jim = new Person("Jim",13);
for (n in jim) {
    if (jim.hasOwnProperty(n)) {
        console.log(n);
     }
}
// This will output 'name' and 'age'.

// The pure way...
var tim = Object.create(new Person("Tim",14));
for (n in tim) {
    if (tim.hasOwnProperty(n)) {
        console.log(n);
     }
}
// This will output nothing because all the members belong to the prototype.
// If I remove the hasOwnProperty check then 'name' and 'age' will be output.

Правильно ли я понимаю, что разница становится очевидной только при проверке членов на самом объекте?

6
задан Jules 28 April 2012 в 08:13
поделиться