有没有一种方法可以在javascript对象中代理变量
Is there a way to proxy variables within a javascript object?
假设我使用的是John Resig的类(在这里找到:class),javascript对象有没有办法将其变量代理到另一个对象?
示例:
var Car = Class.extend({
init: function(mileage, color, type) {
this.mileage = mileage;
this.color = color;
this.type = carDatabase[type];
}
));
// This would be loaded in as a datasource, not sitting in global
// space like this.
var carDatabase = {
"Falcon": {
"year": 2013,
"engine": "Inline 8",
"company": "Ford"
},
"Commodore": {
"year": 2012,
"engine": "V8",
"company": "Holden"
},
// etc etc
};
// Using the Car class somewhere:
var myCar = new Car(10000, "blue", "Falcon");
console.log(myCar.color); // blue
console.log(myCar.type.year); // 2013
console.log(myCar.type.company); // Ford
因此,在上面的例子中,我可以代理将type
转发到Car类本身中吗?而不复制type
的内容。
理想情况下,为了类的一致性,我宁愿键入myCar.company
,而不是myCar.type.company
。
我知道underline和jQuery都提供了扩展方法,但它们似乎将内容复制到了原始对象中。我也考虑过蝇重模式(我认为这是过分的,我会得出与上述相同的症结所在)。
您可以使用defineProperty,它支持为属性定义get/set方法等。
参考的MDN文章也有一个兼容性表,但在所有浏览器的最新版本中通常都支持它,但有一些限制。
既然你提到了John Resig,他有一篇很好的博客文章"ECMAScript 5对象和属性",这篇文章有点老,但读起来还是不错的。它写在2009年5月,他在帖子的早期表示,一些示例和规格可能会改变。
是。使用ES6Proxy(),您可以为属性获取和设置事件创建陷阱。
const handler = {
get(object, property) {
if(object.hasOwnProperty(property)){
for(var prop in object[property]){
this[prop] = object[property][prop] //set class instance props
}
}
return object[property]; // don't need to return
}
};
var carDatabaseProxy = new Proxy(carDatabase, handler)
class Car {
constructor(mileage,color,type){
this.mileage = mileage;
this.color = color;
carDatabaseProxy[type]; // just need to get
}
}
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值