- 主题:js访问器属性
在javascript高级程序设计6.1.2节中讲到的访问器属性测试失败,哪里有错误呢?
环境:mac + chrome、mac + firefox
代码如下:
var user = {
name: 'ename'
};
user.__defineSetter__('name', function(val) {
console.log(val);
this.name = val;
});
user.__defineGetter__('name', function() {
return this.name;
});
user.name = 'newname';
换成ObjectProperty也是一样失败。
Object.defineProperty(user, 'name', {
get: function() {
return this.name;
},
set: function(val) {
this.name = val;
}
});
js执行后,变成了一个死循环。到底是哪里错误了呢?
--
FROM 123.119.76.*
改成:
Object.defineProperty(user, 'name', {
get: function() {
return this._name;
},
set: function(val) {
this._name = val;
}
});
【 在 ename (ename) 的大作中提到: 】
: 在javascript高级程序设计6.1.2节中讲到的访问器属性测试失败,哪里有错误呢?
: 环境:mac + chrome、mac + firefox
: 代码如下:
: ...................
--
FROM 183.95.135.*
谢谢,确实是这个问题
书上的例子对象的属性就是_开通,我自己写的时候就去掉了。
后面又没有讲到在修改访问器属性时必须要有_
这个例子太坑人了
【 在 nilnul 的大作中提到: 】
: 改成:
: Object.defineProperty(user, 'name', {
: get: function() {
: ...................
--
FROM 123.119.76.*
你还没明白。
那个_name改成 abc也可以,就是不能使name。
【 在 ename (ename) 的大作中提到: 】
: 谢谢,确实是这个问题
: 书上的例子对象的属性就是_开通,我自己写的时候就去掉了。
: 后面又没有讲到在修改访问器属性时必须要有_
: ...................
--
FROM 183.95.135.*
![](/img/ubb/em/17.gif)
为什么name这个不行呢?
是因为name是函数对象的的一个属性,不可更改?
【 在 nilnul 的大作中提到: 】
: 你还没明白。
: 那个_name改成 abc也可以,就是不能使name。
:
--
FROM 123.119.76.*
你这样死循环了啊 给name赋值就会调用set
【 在 ename 的大作中提到: 】
:
![](/img/ubb/em/17.gif)
: 为什么name这个不行呢?
: 是因为name是函数对象的的一个属性,不可更改?
: ...................
--来自微水木3.2.0
--
FROM 222.130.140.*
他那个实际上就是创造了一个私有属性把值存起来了
【 在 iteddy1314 的大作中提到: 】
: 你这样死循环了啊 给name赋值就会调用set
: 【 在 ename 的大作中提到: 】
: :
![](/img/ubb/em/17.gif)
: ...................
--来自微水木3.2.0
--
FROM 222.130.140.*