转载自: http://www.blackglory.me/javascript-magic-method-definegetter-definesetter/
在javascript的类中,可以用defineGetter和defineSetter_控制成员变量的Get和Set行为
例如,在一个图书类中,我们自动为Book加上书名符号:
function Book(name){
this.bookName=name;
this.getName=function(){
return "《"+this.bookName+"》";
}
this.setName=function(name){
this.bookName=name;
}
}
接下来我们只要规定使用者通过setName和getName方法对成员变量bookName操作就可以了.
但实际上还可以更方便:
function Book(name){
this.bookName=name;
this.getName=function(){
return "《"+this.bookName+"》";
}
this.setName=function(name){
this.bookName=name;
}
}
Book.prototype.__defineGetter__("name",function(){return "《"+this.bookName+"》";});
Book.prototype.__defineSetter__("name",function(name){this.bookName=name;});
这样,就可以直接通过Book对象的name属性来返回带有书名符号的字符串而又不影响成员变量本身了.
相关推荐
__defineGetter__和__defineSetter__是JavaScript中的两个特殊方法,用于在对象定义后添加Getter和Setter方法。Getter是一种获取一个属性的值的方法,Setter是一种设置一个属性的值的方法。 在JavaScript中,可以为...
在JavaScript中,虽然没有专门的关键字来定义get和set方法,但是可以通过特殊的内置方法`__defineGetter__`和`__defineSetter__`来实现相同的功能。 `__defineGetter__`和`__defineSetter__`是JavaScript对象自有的...
1. 使用`__defineGetter__`和`__defineSetter__`这两个非标准方法(不推荐,因为它们在一些旧版本的浏览器中可能不支持)。例如: ```javascript function Field(val) { var value = val; this.__defineGetter__(...
这是通过几种不同的方法来实现的,主要涉及到对象字面量、Object.defineProperty()方法,以及在旧版JavaScript中支持的__defineGetter__和__defineSetter__方法。 1. Object.defineProperty()方法 在JavaScript中,...
- **__defineSetter__ 和 __defineGetter__**: 这些方法用于定义或获取特定属性的行为。例如,`__defineSetter__("returnValue", ...)`允许我们在设置`event.returnValue`时自动调用`preventDefault()`方法,以模拟...
使用`__defineGetter__`和`__defineSetter__`方法,可以直接在对象实例上定义getter和setter。例如: ```javascript var obj = { _value: null, // 使用__defineGetter__定义getter __defineGetter__("value", ...
值得注意的是,虽然现代浏览器中 `set` 和 `get` 关键字以及 `Object.defineProperty` 方法用起来更为方便和强大,但闭包和 `__defineGetter__/__defineSetter__` 方法在老旧浏览器上仍然有其存在的价值。...
最后,由于Object.prototype.watch方法在IE等浏览器上不被支持,文章还提到了一个替代方案,即通过Object.prototype.__defineGetter__和__defineSetter__来模拟watch行为。这两个方法用于在IE和一些老版本浏览器中...
在JavaScript的某些版本中,为了实现对象间的继承,同时保留Getters和Setters,可以使用`__defineGetter__`, `__defineSetter__`, `__lookupGetter__`, 和 `__lookupSetter__`等方法。例如,以下是一个简单的继承...
进一步地,我们可以通过JavaScript原型方法`__defineGetter__`来模拟在Firefox中创建一个全局的`window.event`,以便在任何地方都能像在IE那样访问事件对象: ```javascript function FixPrototypeForGecko() { ...
### JavaScript 下 DOM 与 XML 节点访问的兼容性问题 #### 一、引言 在Web开发中,浏览器的兼容性问题一直是一个不容忽视的话题。不同的浏览器内核(如IE的Trident、Chrome的Blink、Firefox的Gecko等)对标准的...
这是通过`__defineGetter__`和`__defineSetter__`两个函数实现的。 getter方法: ```javascript HTMLElement.prototype.__defineGetter__("innerText", function() { var anyString = ""; var childS = this....
为了解决这一不兼容问题,可以利用DOM Range API和`__defineGetter__`/`__defineSetter__`方法来模拟实现`outerHTML`属性的功能。代码中首先检查当前环境是否支持`HTMLElement.prototype`,然后定义了`outerHTML`的...
然后,通过`__defineSetter__`和`__defineGetter__`方法来扩展或重定义`Event`对象的属性,以使其与IE的行为一致: 1. `returnValue`:设置或检索事件处理程序是否阻止了默认操作。在Firefox中,可以通过调用`...
- `__defineGetter__`和`__defineSetter__`是旧版JavaScript(ES3)中的方法,用于添加`getter`和`setter`,但已被`Object.defineProperty()`取代,因为后者提供了更多的灵活性和控制。 了解和正确使用`getter`和`...
这里我们使用了JavaScript的__defineGetter__和__defineSetter__方法来实现这一目标: ```javascript if (!isIE()) { // Firefox innerText define HTMLElement.prototype.__defineGetter__("innerText", ...
HTMLElement.prototype.__defineSetter__("innerText", function(sText) { this.textContent = sText; }); } ``` 2. **鼠标样式设置**: - **IE**:支持`style="CURSOR:pointer"`这样的CSS设置来改变鼠标样式...