Getter是一种获取一个属性的值的方法,Setter是一种设置一个属性的值的方法。可以为任何预定义的核心对象或用户自定义对象定义getter和setter方法,从而为现有的对象添加新的属性。
有两种方法来定义Getter或Setter方法:
在对象初始化时定义
在对象定义后通过Object的__defineGetter__、__defineSetter__方法来追加定义
要注意的就是getter方法没有参数,setter方法必须有一个参数,也就是要设置的属性的新值。
__defineGetter__和__defineSetter__是Firefox的特有方法,可以利用来它自定义对象的方法。众所周知,IE和FF中的JS很多区别:例如IE中的innerText方法和FF中的textContent方法对应,IE中的srcElement和FF中target对象等。以及一些IE的专有特性:outerHTML,canHaveChildren等。
接下来我们就利用__definGetter__和definSetter__来实现兼容IE和FF:
这里仅为了说明用法,只举一个简单的例子,兼容IE,FF innerText:
<div id="odiv">Hello</div>
<script type="text/javascript">
<!--
if(!/*@cc_on!@*/0){ //如果不是IE
HTMLElement.prototype.__defineGetter__("innerText", function(){
return this.textContent;
});
HTMLElement.prototype.__defineSetter__("innerText", function(s){
this.textContent = s;
})
}
window.onload = function(){
// innerText在IE,FF下均有效了.
alert(document.getElementById("odiv").innerText);
document.getElementById("odiv").innerText = "world"
}
//-->
</script>
分享到:
相关推荐
关于__defineGetter__和__defineSetter__的说明 __defineGetter__和__defineSetter__是JavaScript中的两个特殊方法,用于在对象定义后添加Getter和Setter方法。Getter是一种获取一个属性的值的方法,Setter是一种...
在JavaScript中,虽然没有专门的关键字来定义get和set方法,但是可以通过特殊的内置方法`__defineGetter__`和`__defineSetter__`来实现相同的功能。 `__defineGetter__`和`__defineSetter__`是JavaScript对象自有的...
这是通过几种不同的方法来实现的,主要涉及到对象字面量、Object.defineProperty()方法,以及在旧版JavaScript中支持的__defineGetter__和__defineSetter__方法。 1. Object.defineProperty()方法 在JavaScript中,...
- **__defineSetter__ 和 __defineGetter__**: 这些方法用于定义或获取特定属性的行为。例如,`__defineSetter__("returnValue", ...)`允许我们在设置`event.returnValue`时自动调用`preventDefault()`方法,以模拟...
这段代码首先检查当前浏览器是否为Firefox,如果是,则通过__defineGetter__和__defineSetter__方法扩展HTMLElement原型,添加innerText的getter和setter。getter方法`getInnerText`递归遍历元素的子节点,根据...
这里我们使用了JavaScript的__defineGetter__和__defineSetter__方法来实现这一目标: ```javascript if (!isIE()) { // Firefox innerText define HTMLElement.prototype.__defineGetter__("innerText", ...
最后,由于Object.prototype.watch方法在IE等浏览器上不被支持,文章还提到了一个替代方案,即通过Object.prototype.__defineGetter__和__defineSetter__来模拟watch行为。这两个方法用于在IE和一些老版本浏览器中...
1. 使用`__defineGetter__`和`__defineSetter__`这两个非标准方法(不推荐,因为它们在一些旧版本的浏览器中可能不支持)。例如: ```javascript function Field(val) { var value = val; this.__defineGetter__(...
值得注意的是,虽然现代浏览器中 `set` 和 `get` 关键字以及 `Object.defineProperty` 方法用起来更为方便和强大,但闭包和 `__defineGetter__/__defineSetter__` 方法在老旧浏览器上仍然有其存在的价值。...
使用`__defineGetter__`和`__defineSetter__`方法,可以直接在对象实例上定义getter和setter。例如: ```javascript var obj = { _value: null, // 使用__defineGetter__定义getter __defineGetter__("value", ...
在JavaScript的某些版本中,为了实现对象间的继承,同时保留Getters和Setters,可以使用`__defineGetter__`, `__defineSetter__`, `__lookupGetter__`, 和 `__lookupSetter__`等方法。例如,以下是一个简单的继承...
为了在Firefox中模拟innerText的行为,可以通过`__defineGetter__`和`__defineSetter__`方法为HTMLElement原型添加getter和setter,使其在Firefox中表现得像innerText一样。 6. **长度兼容性** Firefox要求长度值...
要理解JS中的prototype, 首先必须弄清楚以下几个概念 1. JS中所有的东西都是对象 2. JS中所有的东西都由Object衍生而来, 即... // propertyIsEnumerable, __defineGetter__, __lookupGetter__, __defineSetter__,
- `__defineGetter__`和`__defineSetter__`是旧版JavaScript(ES3)中的方法,用于添加`getter`和`setter`,但已被`Object.defineProperty()`取代,因为后者提供了更多的灵活性和控制。 了解和正确使用`getter`和`...
这是通过`__defineGetter__`和`__defineSetter__`两个函数实现的。 getter方法: ```javascript HTMLElement.prototype.__defineGetter__("innerText", function() { var anyString = ""; var childS = this....
为了解决这一不兼容问题,可以利用DOM Range API和`__defineGetter__`/`__defineSetter__`方法来模拟实现`outerHTML`属性的功能。代码中首先检查当前环境是否支持`HTMLElement.prototype`,然后定义了`outerHTML`的...
这段代码首先通过`__defineGetter__`和`__defineSetter__`方法为`HTMLElement.prototype`添加了`outerHTML`的getter和setter。getter部分负责构建元素的完整HTML字符串,setter部分则用文档碎片和替换节点的方法来...