Когда необходимо использовать “прототип” во время объектного увеличения в JavaScript?

Я смущен понятием "прототипа" в JavaScript.

Когда я определю объект оба из следующего, кажись, работать:

myObject = {};
myObject.prototype.method1 = function() { ... };
myObject.prototype.method2 = function() { ... };
myObject.prototype.method3 = function() { ... };

и...

myObject = {};
myObject.method1 = function() { ... };
myObject.method2 = function() { ... };
myObject.method3 = function() { ... };

Кто-либо мог пролить некоторый свет на это? Каково точно различие между этими двумя способами создать объект и почему я выбрал бы один по другому? (У меня есть это чувство в моем пищеварительном тракте, это важно...),

Спасибо!

5
задан Travis 16 February 2010 в 07:09
поделиться

2 ответа

Вы должны использовать свойство prototype только в функциях конструктора , но не в экземплярах объекта , например:

function Test () {}
Test.prototype.method1 = function () {/*...*/};

var obj = new Test();

Прототип ] функции конструктора, используется оператором new , когда он создает наш новый экземпляр объекта.

У всех нативных объектов есть скрытая ссылка, которая составляет цепочку прототипов.

Эта скрытая связь между объектами является внутренним свойством [[Prototype]] , и только оператор new может его установить.

В приведенном выше примере объект obj внутренне связан с прототипом конструктора, метод method1 доступен из obj , но физически не существует для этого объекта этот метод существует в объекте Test.prototype , и он извлекается через цепочку прототипов , например:

typeof obj.method1; // "function"
obj.hasOwnProperty('method1'); // false
obj.method1 === Test.prototype.method1; // true

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

var myObject = {};
myObject.prototype = "foo";
myObject.bar = "bar";

// myObject is simply {"prototype":"foo","bar":"bar"}
8
ответ дан 14 December 2019 в 01:07
поделиться

Второй способ добавляет только методы к этому объекту. Первый способ делает его доступным для других объектов, созданных с помощью new с этим «типом».

1
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: