2015-11-13 4 views

ответ

1

Это происходит потому, что вы указали classA.prototype к нового объекта но не изменить объект, который obj.prototype указывает.

Происходящее:

classA.prototype ------> A 
// create object with new classA() 
// now its prototype also points to A 
obj.prototype ------> A // points to the same prototype 

теперь вы reasign прототип classA

classA.prototype ------> B 

но прототип obj все еще указывает на A (он никогда не был изменен)

obj.prototype ------> A 

Итак, все, что вы сделали, это изменить prot otype ссылка classAпосле ссылка на прототип для obj была уже установлена.

Если вы хотите, чтобы obj увидеть изменения на прототипе, то изменить объект он ссылается (A в приведенном выше примере), а не ссылочный сам:

Пример кода:

function classA(){}; 
 

 
classA.prototype.age =25; 
 

 
var obj = new classA(); 
 

 
console.log(obj.age) // 25 
 

 
// change the object itself, not the reference 
 
delete classA.prototype.age; 
 

 
console.log(obj.age); // undefined

+0

Есть ли способ изменить прототип объекта? –

+0

@RohitGoyal посмотреть на мое редактирование. – nem035

0

Если ваш код в следующем порядке:

function classA(){}; 

classA.prototype.age = 25; 
classA.prototype = {}; 

var obj = new classA(); 
console.log(obj.age) // returns undefined 

Результат будет действительно вашим исключением. Это зависит от того, когда вы установите прототип функции classA. Это будет продемонстрировано в следующем фрагменте кода:

function classA(){}; 

classA.prototype.age = 25; 

var obj1 = new classA(); 

classA.prototype = {}; 

var obj2 = new classA(); 

console.log(obj1.age) // returns 25 
console.log(obj2.age) // returns undefined 

Следовательно, object зависит только от изменений в виде prototype функции, когда это произойдет до object's создания.

0

переназначение вашего prototype после создания объекта не влияет на ранее созданный объект, он будет по-прежнему иметь старый prototype, когда он был создан. Новый prototye будет влиять только на новые объекты

Смежные вопросы