引用自己的对象属性
Referencing own object properties
做以下操作有问题吗....
var myObject = {
name: "Johnny",
init: function() {
$("body").mousemove(this.setStatus);
},
setStatus: function(ev) {
$("body").append("<div>Mouse Move by: " + myObject.name + "</div>");
}
};
myObject.init();
这是引用一个对象的属性时,以这种方式创建类的最佳方式(即从setStatus函数调用myObject.name)?
看起来您已经意识到,当this.setStatus
被触发时,上下文变量this
将引用接收事件的元素(即您的<body>
)而不是myObject
。
然而,你真的不应该在对象本身中引用myObject
——对象不应该知道它在自身之外被称为什么。
this
作为附加参数传递给.mouseMove
,这样:
$("body").mousemove(this, this.setStatus);
然后在你的事件处理程序中,你可以通过事件的data
字段检索当前对象引用:
setStatus: function(ev) {
var self = ev.data;
$("body").append("<div>Mouse Move by: " + self.name + "</div>");
}
这很好。如果setStatus
没有在其他地方使用,您可以将其移动到一个匿名函数并将其传递给mousemove
。
您需要确保this
仍然可用。当将函数传递给事件处理程序时,this
将指向相关的DOM节点。
因为你正在使用jQuery,你可以使用$.proxy()
来绑定this
内部的函数到其他东西:
$("body").mousemove($.proxy(this.setStatus, this));
然而,通过其他方式使原始this
可用会更清晰:
var myObject = {
name: "Johnny",
init: function() {
var self = this;
$("body").mousemove(function(ev) {
self.setStatus.call(this, ev, self);
});
},
setStatus: function(ev, self) {
$("body").append("<div>Mouse Move by: " + self.name + "</div>");
}
};
这样就可以了。另一种方法是向mousemove传递一个匿名函数:
var myObject = {
name: "Johnny",
init: function() {
var thisObject = this;
$("body").mousemove(function() {
$("body").append("<div>Mouse Move by: " + thisObject.name + "</div>");
});
}
};
myObject.init();
看到小提琴
相关文章:
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象