это ключевое слово против имени объекта при добавлении метода к существующему объекту - PullRequest
0 голосов
/ 23 декабря 2018
function Foo(name, age){
  this.name = name;
  this.age = age;
  this.announce = function(){
    alert(this.name + " is " + this.age + " years old");
  };
}

var myFoo = new Foo("John", 42);

Допустим, я хочу добавить метод к этому конкретному экземпляру Foo (а не к остальным).Стоит ли использовать ключевое слово this для изменения свойства age

myFoo.becomeYounger = function(){
  this.age--;
};

или я должен ссылаться на объект по его имени, так как он уже существует?

myFoo.becomeYounger = function(){
  myFoo.age--;
};

Какиеодин лучше / быстрее или есть какая-то разница?

1 Ответ

0 голосов
/ 23 декабря 2018

Они оба работают, но есть некоторые риски при использовании имени объекта, посмотрите на это:

let user = {
  name: "John",
  age: 30,

  sayHi() {
    alert( user.name ); // leads to an error
  }

};


let admin = user;
user = null; // overwrite to make things obvious

admin.sayHi(); // Whoops! inside sayHi(), the old name is used! error!

При использовании this код будет работать правильно, просто позаботьтесь о такого родасценарии.

Также, если вы хотите использовать повторно используемый код, используйте this, который подходит лучше:

let user = { name: "John" };
let admin = { name: "Admin" };

function sayHi() {
  alert( this.name );
}

// use the same functions in two objects
user.f = sayHi;
admin.f = sayHi;

// these calls have different this
// "this" inside the function is the object "before the dot"
user.f(); // John  (this == user)
admin.f(); // Admin  (this == admin)

admin['f'](); // Admin (dot or square brackets access the method – doesn't matter)

Чтобы узнать больше, здесь: https://javascript.info/object-methods

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...