function classA(){};
classA.prototype.age =25;
var obj = new classA();
console.log(obj.age) //returns 25
Теперь, когда я делаю:Наследование свойства от прототипа
classA.prototype = {};
Почему obj.age
все еще возвращаются 25
?
function classA(){};
classA.prototype.age =25;
var obj = new classA();
console.log(obj.age) //returns 25
Теперь, когда я делаю:Наследование свойства от прототипа
classA.prototype = {};
Почему obj.age
все еще возвращаются 25
?
Это происходит потому, что вы указали 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
Если ваш код в следующем порядке:
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
создания.
переназначение вашего prototype
после создания объекта не влияет на ранее созданный объект, он будет по-прежнему иметь старый prototype
, когда он был создан. Новый prototye
будет влиять только на новые объекты
Есть ли способ изменить прототип объекта? –
@RohitGoyal посмотреть на мое редактирование. – nem035