Что такое время жизни объекта в коде JavaScript, который использует наследование прототипа? - PullRequest
8 голосов
/ 17 января 2012

Я сейчас читаю «Хорошие детали Javascript» и наткнулся на следующий абзац

Если мы попытаемся извлечь значение свойства из объекта, и если объекту не хватает имени свойства, затем JavaScript пытается получить значение свойства из объекта-прототипа. И если этот объект не хватает свойства, затем он идет к своему прототипу, и так далее, пока процесс окончательно завершается с Object.prototype.

Если я создаю объект obj2 из obj1 в качестве прототипа, означает ли это, что obj1 не может быть уничтожен до тех пор, пока obj2 также не выйдет из области видимости?

1 Ответ

5 голосов
/ 17 января 2012

Пока вы создали наследование вашего объекта (связали прототипы), я не думаю, что браузер полагается на ваши ссылки на этот объект.

ex1:

var a = function(){};
a.prototype.toString = function(){return "I'm an A!";};
var b = new a();
a = undefined;
var c = new a();// error => a is not a function any more!
b.toString();// it works because the prototype is not destroyed, 
             // only our reference is destroyed

ex2:

var a = function(){};
a.prototype.toString = function(){return "I'm an A!";};
var b = function(){};
b.prototype = new a();
a = undefined;
var c = new b();
console.log(c+'');// It still works, although our 
                  // initial prototype `a` doesn't exist any more.

ОБНОВЛЕНИЕ: Это может быть связано с тем фактом, что в javascript вы не можете точно уничтожитьобъект;Вы можете удалить только все ссылки на него.После этого браузер решает, как обращаться с объектами, на которые нет ссылок, через Сборщик мусора .

...