我正在浏览一些伪jquery代码 - 虽然我理解public void onClick(View v) {
switch(on) {
case 0:
startService(new Intent(this, BluetoothScanner.class));
on = 1;
break;
case 1:
stopService(new Intent(...);
on = 0;
break;
}
}
});
大部分内容,但有些实现令人困惑。我遇到了这个伪代码,这是为了解释jQuery是如何工作的:
this
对我来说,(function() {
var foo = function(arg) { // core constructor
// ensure to use the `new` operator
if (!(this instanceof foo))
return new foo(arg);
// store an argument for this example
this.myArg = arg;
//..
};
// create `fn` alias to `prototype` property
foo.fn = foo.prototype = {
init: function () {/*...*/}
//...
};
// expose the library
window.foo = foo;
})();
// Extension:
foo.fn.myPlugin = function () {
alert(this.myArg);
return this; // return `this` for chainability
};
foo("bar").myPlugin(); // alerts "bar"
或this
中(!(this instance of foo))
的内容并不是很明显。
我的初步印象是每次运行this.myArg = arg;
的实例时都会引用此代码,即foo
。
假设这个假设,foo("bar").myPlugin();
通常是指拥有该方法的对象,但在这种情况下,如果this
拥有foo
(理解this
是伪的对于foo
),jQuery
并没有多大意义。这意味着每次调用jQuery.myArg = arg
即foo
它实例化foo("bar").myPlugin();
并进一步在底部的示例时,foo.bar
是从foo.bar.myPlugin
实例化的实际属性?
同时,foo
,即。 this instanceof foo
似乎是多余的。
我在这里缺少什么?感谢任何帮助/指导。
答案 0 :(得分:2)
foo
是一个构造函数,我们确保它总是这样调用。
foo
是一个构造函数。当使用new
关键字调用时,foo
函数的主体将在foo
类的新实例的上下文中执行(this
将指向此新实例)。所以:
this instanceof foo === true
当没有 new
关键字时,上下文将为window
,通常不会创建新对象。
经
if (!(this instanceof foo))
return new foo(arg);
我们确保即使遗漏了new
个关键字,我们也会返回foo
的新实例。