Js的get和set语法
总能看到get 和 set 需要入个门
//第一种声明方式: 这是mdn上面的案例
var language = {
set current(name) {
this.log.push(name);
},
log: []
}
//删除了current属性
delete o.current;
//第二种声明方式: 已经存在的对象这么干
var o = {a: 0};
Object.defineProperty(o, 'b', { set: function(x) { this.a = x / 2; } });
var expr = 'foo';
var obj = {
baz: 'bar',
set [expr](v) { this.baz = v; }
};
obj.foo = 'baz'; // run the setter
//第2.5方式: 这个是复数形式
Object.defineProperties(test, {
o: {
get() {},
set(v) {}
},
p: {
get() {},
set(v) {}
}
});
//第三种声明方式: 废弃的不支持的方式.
Object.prototype.__defineGetter__和Object.prototype.__defineSetter__
这货就是个语法糖啊, js是吃糖上瘾了吧……
一个案例:
var foo = (function(){
var o = {
a: 1,
b: 2,
/**更多属性**/
};
return function(key) { //foo是一个function
return o[key];
}
})();
var key = Symbol(); //这个货不能放到json里面是一个语言级运行时唯一, 不会被for in遍历, 可以搞私有属性. 参考: https://segmentfault.com/a/1190000018522663
Object.defineProperty(Object.prototype, key, {
get() {
return this;
}
});
var o = foo(key);
console.log(Object.keys(o)); // ['a', 'b']
这个文章很清晰: https://zhuanlan.zhihu.com/p/25672454