Javascript 从“\uu\u defineGetter”访问原始属性值__`
是否可以从Javascript getter访问原始属性值 如果没有,还有其他“现代”javascript技术可以实现类似的功能吗 也就是说,如果我有这样的代码Javascript 从“\uu\u defineGetter”访问原始属性值__`,javascript,oop,Javascript,Oop,是否可以从Javascript getter访问原始属性值 如果没有,还有其他“现代”javascript技术可以实现类似的功能吗 也就是说,如果我有这样的代码 o = {} o.foo = "bar" o.__defineGetter__("foo", function(){ //can I access the value "bar" here? return "some other value"; }); 可以从我的getter函数中访问值“bar”吗?或者使用\uuuu
o = {}
o.foo = "bar"
o.__defineGetter__("foo", function(){
//can I access the value "bar" here?
return "some other value";
});
可以从我的getter函数中访问值“bar”吗?或者使用\uuuu defineGetter\uuuu
会吹走属性吗
(上下文:不是新手开发人员,但在过去的4/5年中,我一直忽略非跨浏览器Javascript,我希望能赶上进度)ECMAscript 262 edition 5引入了一个选项,用于在规范正式定义的对象上设置getter和setter。您可以直接在对象上设置它们
var foo = {
get bar() {
return "foo";
}
};
或者使用Object.defineProperty()
然而,问题依然存在。覆盖属性将不可修复地覆盖它。您可以做的是使用对象原型链
来收集属性
不,(以及)覆盖所有旧的内容。在“清除属性”之前,您必须将旧值缓存在一个额外变量中 将IEFE用作闭包:
o = {foo: "bar"};
(function(oldval) {
o.__defineGetter__("foo", function(){
return "new"+oldval;
});
})(o.foo);
o.foo; // "newbar"
“定义者”就像一条捷径
Object.defineProperty(o, "foo", {get : function() {
return "some other value";
},
enumerable : true});
因此,o.foo值被简单地覆盖。要解决此问题,请添加附加属性o.\u foo,并且不要忘记setter
我的例子是:
var o = {};
Object.defineProperty(o, "foo", {
get : function() {
return this._foo;
},
set : function(value) {
this._foo = value;
},
enumerable : true});
o.foo = "newbar";
o.foo; //newbar
\uuuu proto\uuuu
现在是标准的一部分吗?@JuanMendes:至少每个支持ES5的浏览器都支持该属性。当然,您也可以调用对象.getPrototypeOf
。@jAndy:Opera支持ES5.1,但没有\uuuuuuuuuuuuuuu
。使用标准的对象。我只能相信你,从来没有真正使用过歌剧。
Object.defineProperty(o, "foo", {get : function() {
return "some other value";
},
enumerable : true});
var o = {};
Object.defineProperty(o, "foo", {
get : function() {
return this._foo;
},
set : function(value) {
this._foo = value;
},
enumerable : true});
o.foo = "newbar";
o.foo; //newbar