Я думаю, что разница в моей голове, но я просто хочу быть уверен.В Javascript разница между «Object.create» и «new»
На странице Дуглас Крокфорд Prototypal Inheritance in JavaScript, он говорит
В прототипных системе, объекты наследуют от объектов. JavaScript, , однако, отсутствует оператор, который выполняет эту операцию. Вместо этого у него есть новый оператор, так что новый 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.
ли я понимаю правильно, что разница только становится очевидным при тестировании членов на самом объекте?
см. Http://stackoverflow.com/questions/4166616/understanding-the-difference-between-object-create-and-new-somefunction-in-j –
Я видел этот вопрос вчера, я думаю, но ответ мне не был ясен. Теперь, когда я выполнил свои тесты и набрал свой вопрос, это понятно! – Jules