__defineSetter__替换firefox 3.5.x及以上版本

时间:2010-07-31 10:58:58

标签: javascript

__defineSetter__似乎不再适用于firefox最新版本。它适用于Chrome。

你知道吗?任何做同样事情的替代功能,也适用于其他浏览器,如IE,Opera,Safari?

2 个答案:

答案 0 :(得分:8)

__defineGetter____defineSetter__仍然在最新的Firefox中,我不相信有计划在短期内删除它们。从长远来看,ECMAScript 5指定了一种不同形式的getter和setter,最终将进入所有浏览器。

以下是ECMAScript 5 getter和setter的示例。它目前适用于IE 9,Chrome 5,Safari 5:请参阅here以获取兼容性表格。

var o = {};
Object.defineProperty(o, "p", {
    get: function() {
        return "A property";
    },
    set: function(val) {
        alert("Setting " + val + "!");
    }
});

修改

根据要求,这是__defineGetter____defineSetter__的工作示例,相当于上面的ES5代码:

var o = {};
o.__defineGetter__("p", function() {
    return "A property";
});
o.__defineSetter__("p", function(val) {
    alert("Setting " + val + "!");
});

答案 1 :(得分:0)

对于firefox你应该使用“watch”方法。

 if(Object.prototype.watch){
    instance.watch("property", function(id, prevValue, newValue){

            //do operaions here on the value ---

         return newValue  
  }
}

...其中instance是对象,属性是您要监视更改的实际属性。