Сообщение от jesteross
|
может есть какой-то вариант обратится через прототип
|
Конечно есть. Только надо дефолтные значения задать, иначе, значения будут undefined:
function Animal(obj){
this.name = obj.name;
this.age = obj.age;
}
Animal.prototype={
age: 0,
name: "noname",
al: function(){
alert(this.name + ' lives ' + this.age + ' years');
}
}
var dog = new Animal({name:'dog', age: 15});
dog.al()
dog.al = function(){
alert(this.name + ' lives ' + (this.age+10) + ' years');
}
dog.al()
Animal.prototype.al()
// ::: dog lives 15 years
// ::: dog lives 25 years
// ::: noname lives 0 years
А лучше без сахара:
Animal={
name: "noname",
age: 0,
create: function(name, age){
var o=Object.create(this)
o.name=name
o.age=age
return o
},
al: function(){alert(this.name+" lives "+this.age+" years." )}
}
dog=Animal.create("dog", 15)
dog.al()
dog.al=function(){alert(this.name+" lives "+(this.age+10)+" years." )}
dog.al()
Animal.al()
Сообщение от jesteross
|
но тут я не пойму, что именно будет в этом замыкании
|
Ничего там не будет. У тебя нет там никакого лексического контекста. Да и самого замыкания там скорей всего не будет. Чтобы точно утверждать, надо знать реализацию, конечно. Но, я думаю, замыкание вообще не будет создано. Короче, можешь считать, что его там просто нет.