【发布时间】:2010-09-10 12:47:06
【问题描述】:
我将从一个示例 sn-p 开始:
self.addwidget({
box: ns.box({
text: 'Foobar',
fromTop: ~~(Math.random()*window.innerHeight),
fromLeft: ~~(Math.random()*window.innerWidth),
toTop: 240,
toLeft: 40,
css: 'foobar',
easing: 'easeOutCirc',
duration: 2000,
events: {
mousedown: function(e){
e.target.position = {x: e.pageX, y: e.pageY};
},
mouseup: function(e){
// "this" should reference be "box"
}
}
}),
delay: 3000
});
简短描述:ns.box() 将对象作为参数并创建一个新的jQuery object。它使用jQuery.extend() 将events 属性对象与jQuery constructor $('<elem/>', {}); 合并
之后,ns.box() 返回一个包含一些方法的新对象。
--
我想要归档的是能够访问event handlers 中的那些propertys / methods。当然,此时我无法访问box.somemethod,因为此时我无法引用外部box 属性。所以我尝试将事件处理程序的范围从jQuery.proxy() 更改为this,但没有成功。this.somemethod 即使在代理时也未被引用。
我还尝试从上到下代理所有对象,也没有成功。
在像这样的构造中,甚至有可能在事件处理程序中从ns.box() 的返回对象访问属性吗?
【问题讨论】:
-
你真的必须使用
~~吗?因为我很确定现在有人会过来问这意味着什么。 :) (james.padolsey.com/javascript/double-bitwise-not 如果你是其中之一) -
@Yi:很抱歉,这只是我的代码转储。我不想在这里混淆任何人。您的链接应该澄清这一点,谢谢。
-
@蒋毅:很好的链接,谢谢。我喜欢他的断言“它更快”。几乎不可能用 JavaScript 做出如此全面的陈述,而在野外有各种各样的实现。 IE 上更快的东西在 FF 等上并不总是更快。
-
@T.J.同样重要的是要意识到在处理负数时它不等同于 Math.floor(),我不确定在那篇文章中强调的足够多。我确实喜欢使用像
!!和~~这样的成语,甚至只是+,而不是更冗长的方法,但那是因为我非常非常懒惰;-)
标签: javascript jquery scope