gpt4 book ai didi

javascript - 使用属性时如何调用函数?

转载 作者:搜寻专家 更新时间:2023-11-01 05:31:19 28 4
gpt4 key购买 nike

当我更改 JavaScript“类”中的属性时,我想在使用旧的已弃用属性时登录到控制台。

例如。

var app = function() {
this.oldvar = function() { console.log('oldvar is old!'); return myapp.newvar; };
this.newvar = 'Hello world!';
}

var myapp = new app();

alert(myapp.oldvar);

我的示例将无法运行,因为 oldvar 的字符串表示将被输出并且该函数实际上不会被调用。

我希望 alert() 认为它正在使用旧属性,但“额外”代码将在函数中运行。

我不想将 oldvar 作为函数调用。我希望我的代码尝试 alert() 它作为一个字符串。

这可能吗?

最佳答案

您可以像这样为您的应用定义一个getter:

var app = function () {
this.newvar = 'Hello world!';
};

app.prototype = {
get oldvar() {
console.log('oldvar is old!');
return this.newvar;
}
};

var myapp = new app();

alert(myapp.oldvar);

我已经在 Node.js v0.10.32 和 JSFiddle 中对此进行了测试在最新的 Chrome 中,它似乎对我有用。但是,这是 ECMA Script 中相对的新功能,因此较旧的浏览器不支持它。我建议您引用 Mozilla Developer Network Docs用于兼容性表。

上述方法涉及重新定义您的应用原型(prototype)。如果 app 完全是您自己的函数,这可能没问题。但是,如果您正在使用现有函数并且不想覆盖那里已经存在的所有内容,则可以使用以下替代语法:

var app = function () {
this.newvar = 'Hello world!';
};

Object.defineProperty(app.prototype, 'oldvar', {
get: function () {
console.log('oldvar is old!');
return this.newvar;
}
});

var myapp = new app();

alert(myapp.oldvar);

使用此语法,您可以添加新的 getter 而无需重新定义所有旧的。如果您随后想要删除它,可以使用 JavaScript 中的标准 delete 函数,即 delete app.prototype.oldvar;

关于javascript - 使用属性时如何调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com