如何向已创建的对象添加方法
How add method to Object that's already been created
我有一组从 JSON 数据构建的对象。我得到的 JSON 数据提供了大部分必要的对象属性,但我想向这些对象添加一些额外的方法和属性。添加属性对我来说非常简单。我只是在做:
searchResults[index].isVisible = true;
将 isVisible 属性 添加到每个对象。但我也想为每个对象添加一个方法,可能是这样的:
function toggleVisibility() {
if (this.isVisible) {
this.isVisible = false;
}
else {
this.isVisible = true;
}
}
所以稍后在我的代码中,我可以做如下事情:
if (searchResults[x].isVisible) {
// do things
}
所以,不太确定如何添加此方法。
你可以这样添加函数
searchResults[index].toggleVisibility = function toggleVisibility() {
return this.isVisible = !this.isVisible;
};
看到效果了
var x = searchResults[index];
x.isVisible = true;
x.toggleVisibility();
console.log(x.isVisible); //=> false
x.toggleVisibility();
console.log(x.isVisible); //=> true
不过,这确实有影响。通常,当您有很多相同类型的对象时,像这样的方法会在对象的原型上定义 一次。相反,您在 each 对象上定义一个函数,如果您有很多对象,它可能会占用大量内存。
这是另一种只定义一个函数的方法
function toggleVisibility(obj) {
return obj.isVisible = !obj.isVisible;
}
var x = searchResults[index];
x.isVisible = true;
toggleVisibility(x);
console.log(x.isVisible); //=> false
toggleVisibility(x);
console.log(x.isVisible); //=> true
我有一组从 JSON 数据构建的对象。我得到的 JSON 数据提供了大部分必要的对象属性,但我想向这些对象添加一些额外的方法和属性。添加属性对我来说非常简单。我只是在做:
searchResults[index].isVisible = true;
将 isVisible 属性 添加到每个对象。但我也想为每个对象添加一个方法,可能是这样的:
function toggleVisibility() {
if (this.isVisible) {
this.isVisible = false;
}
else {
this.isVisible = true;
}
}
所以稍后在我的代码中,我可以做如下事情:
if (searchResults[x].isVisible) {
// do things
}
所以,不太确定如何添加此方法。
你可以这样添加函数
searchResults[index].toggleVisibility = function toggleVisibility() {
return this.isVisible = !this.isVisible;
};
看到效果了
var x = searchResults[index];
x.isVisible = true;
x.toggleVisibility();
console.log(x.isVisible); //=> false
x.toggleVisibility();
console.log(x.isVisible); //=> true
不过,这确实有影响。通常,当您有很多相同类型的对象时,像这样的方法会在对象的原型上定义 一次。相反,您在 each 对象上定义一个函数,如果您有很多对象,它可能会占用大量内存。
这是另一种只定义一个函数的方法
function toggleVisibility(obj) {
return obj.isVisible = !obj.isVisible;
}
var x = searchResults[index];
x.isVisible = true;
toggleVisibility(x);
console.log(x.isVisible); //=> false
toggleVisibility(x);
console.log(x.isVisible); //=> true