javascript - 如何使用 ECMAScript 5 定义默认的 getter 和 setter?

标签 javascript prototype getter ecmascript-5

如何为原型(prototype)指定默认的 getter? 对于默认 getter,我的意思是在调用 obj.undefinedProperty123 时调用的函数。

我试过 Object.prototype.get = function(property) {..} 但在这种情况下不会调用。

最佳答案

在 ECMAScript 5 中,您只能通过 Object.defineProperty 拦截对特定命名属性(不是所有属性)的获取/设置操作。 :

Object.defineProperty(someObj, "someProp", {
    get: function() {
        console.log("you tried to get someObj.someProp");
        return "foo";
    }
});

在这里,get函数将在任何时间代码尝试读取 someObj.someProp 时运行.

在即将发布的 ECMAScript 6 草案中,这将通过 proxies 实现。 .代理有一个底层目标对象和设置/获取函数。任何时候在代理的任何属性上发生设置或获取操作时,都会运行适当的函数,将代理的目标对象、使用的属性名称和 set 中使用的值作为参数。尝试。

var proxyHandler = {
    get: function(obj, name){
        console.log("you're getting property " + name);
        return target[name];
    },
    set: function(obj, name, value) {
        console.log("you're setting property " + name);
        target[name] = value;
    }
}

var underlyingObj = {};

// use prox instead of underlyingObj to use get/set interceptor functions
var prox = new Proxy(underlyingObj, proxyHandler);

在这里,设置为获取 prox 上的属性值将导致 set/get要运行的函数。

关于javascript - 如何使用 ECMAScript 5 定义默认的 getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112793/

相关文章:

c++ - c++ 中用于 multimap 的 getter 和 setter

macros - 用于将 getter 函数包装在标识符周围的 Racket 宏

javascript - JS针对多个类并无限重复

javascript - 按下后退按钮时如何取消选择单选按钮?

javascript - Deobfuscating Javascript - 如何替换随机变量名?

JavaScript 原型(prototype)继承和构造函数

java - 为什么对对象使用 getter 会返回 NullPointerException

javascript - 搜索并替换一组数字

javascript - JS原型(prototype),创建具有新特性的对象

javascript - JS - 使用 "new"和将对象作为上下文传递给构造函数有什么区别