站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Javascript 专题Property assessor (getter/setter) in JavaScript

Property assessor (getter/setter) in JavaScript

摘要: Property assessor (getter/setter) in JavaScript
<textarea readonly style="border:none;font-family:Courier New;line-height:150%;width:760px;overflow-y:visible">

Is property assessor good or evil? C# thinks good and Java as contrast. What about JavaScript? Maybe yes, Maybe no...

Mozilla SpiderMonkey introduce variety of solutions for getter and setter. Here is the sample:


<head>
<script type="text/ecmascript">
function trace(msg) {
document.getElementById('console').innerHTML += msg + '
';
}
</script>
</head>
<body>


<script type="text/ecmascript" src="test-js-getset.js">
</script>
</body>

test-js-getset.js
=================

function test1() {

var obj = {

prop getter: function () { return 'prop1'; }

};

trace(obj.prop);

obj.prop getter = function () { return 'prop2'; }

trace(obj.prop);

obj.prop getter = getter function () { return 'prop3'; }

trace(obj.prop);

}

function test2() {

function MyObj() {

this.__defineGetter__('prop', function () { return 'prop1'; });

}

var obj = new MyObj();

trace(obj.prop);

obj.__defineGetter__('prop', function () { return 'prop2'; });

trace(obj.prop);

}

function test3() {

var obj = {

foo: null,

get prop() { return 'prop1'; },

set prop(v) { trace(v); },

bar: null,

};

trace(obj.prop);

obj.prop = 'hello';

}

test1();

test2();

test3();

Unfortunately, M$ IE supports no one of above. And even codes of test1() and test3() will cause syntax error. Only test2() can be interpreted by IE, u can catch the exception for the absence of __defineGetter__. But nothing else can u do, because I found no solution of emulating __defineGetter__ in IE, though there are some tricks to make a object with properties via wrap vbscript or introduce htc.


</textarea>
↑返回目录
前一篇: 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
后一篇: 面向对象的JavaScript