我似乎找不到[]
在 javascript 中重载运算符的方法。有大佬知道吗?
我在想……
MyClass.operator.lookup(index)
{
return myArray[index];
}
还是我看的不对。
我似乎找不到[]
在 javascript 中重载运算符的方法。有大佬知道吗?
我在想……
MyClass.operator.lookup(index)
{
return myArray[index];
}
还是我看的不对。
简单的答案是 JavaScript 允许通过方括号访问对象的子对象。
所以你可以定义你的类:
MyClass = function(){
// Set some defaults that belong to the class via dot syntax or array syntax.
this.some_property = 'my value is a string';
this['another_property'] = 'i am also a string';
this[0] = 1;
};
然后,您将能够使用任一语法访问类的任何实例上的成员。
foo = new MyClass();
foo.some_property; // Returns 'my value is a string'
foo['some_property']; // Returns 'my value is a string'
foo.another_property; // Returns 'i am also a string'
foo['another_property']; // Also returns 'i am also a string'
foo.0; // Syntax Error
foo[0]; // Returns 1
foo['0']; // Returns 1
使用代理。在答案的其他地方提到过,但我认为这是一个更好的例子:
var handler = {
get: function(target, name) {
if (name in target) {
return target[name];
}
if (name == 'length') {
return Infinity;
}
return name * name;
}
};
var p = new Proxy({}, handler);
p[4]; //returns 16, which is the square of 4.
由于括号运算符实际上是属性访问运算符,因此您可以使用 getter 和 setter 对其进行挂钩。对于 IE,您将不得不使用 Object.defineProperty() 代替。例子:
var obj = {
get attr() { alert("Getter called!"); return 1; },
set attr(value) { alert("Setter called!"); return value; }
};
obj.attr = 123;
IE8+ 也一样:
Object.defineProperty("attr", {
get: function() { alert("Getter called!"); return 1; },
set: function(value) { alert("Setter called!"); return value; }
});
对于 IE5-7,onpropertychange
只有事件适用于 DOM 元素,但不适用于其他对象。
该方法的缺点是您只能将请求挂钩到预定义的属性集,而不能挂钩没有任何预定义名称的任意属性。