Показать сообщение отдельно
  #8 (permalink)  
Старый 09.04.2015, 05:58
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от theKingOfJava
 
Регистрация: 31.03.2015
Сообщений: 113

Сообщение от 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
но тут я не пойму, что именно будет в этом замыкании
Ничего там не будет. У тебя нет там никакого лексического контекста. Да и самого замыкания там скорей всего не будет. Чтобы точно утверждать, надо знать реализацию, конечно. Но, я думаю, замыкание вообще не будет создано. Короче, можешь считать, что его там просто нет.
Ответить с цитированием