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

Man*_*uel 8 javascript getter prototype ecmascript-5

如何为原型指定默认的getter?使用默认getter,我的意思是调用if函数obj.undefinedProperty123.

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

aps*_*ers 8

在ECMAScript 5中,您只能通过以下方式拦截特定命名属性(通常不是所有属性)的get/set操作Object.defineProperty:

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

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

在即将发布的ECMAScript 6草案中,这可以通过代理进行.代理具有底层目标对象和set/get函数.只要在任何代理的属性上发生set或get操作,就会运行相应的函数,将代理的目标对象,使用的属性名称和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);
Run Code Online (Sandbox Code Playgroud)

在这里,设置为获取属性值prox将导致set/ getfunctions运行.


Nee*_*asu 0

我不确定你在问什么。但是如果您希望在用户尝试访问时调用一个方法object.nonExistingProperty。我不认为有什么办法可以做到这一点。