我正在研究如何制作 jquery 插件。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>JS Study</title>
</head>
<body>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
(function($, undefined) {
function MyPlugin() {
this.myoption = "myvalue";
}
$.extend(MyPlugin.prototype, {
_attachMyPlugin: function(target, settings) {
console.log(this); // check2
}
});
$.fn.myPlugin = function(options) {
console.log(this); // check1
$.myPlugin._attachMyPlugin(this, options);
return this;
};
$.myPlugin = new MyPlugin(); // singleton instance
}(jQuery));
$(document).ready(function(){
$("#abc").myPlugin();
});
</script>
<h1 id="abc">title1</h1>
</body>
</html>
我不知道为什么this
调用_attachMyPlugin() 时值会发生变化。在 check1this
似乎只引用一个 jQuery 对象。这对我来说似乎并不奇怪。但是在 check2 'this' 似乎是指 MyPlugin 对象。为什么?
this
关键字的引用对象可以在没有new
运算符或调用.apply()
/.call()
函数的情况下更改吗?如果是,为什么?
这是 Chrome 控制台的结果。
[h1#abc,上下文:文档,选择器:“#abc”,jquery:“1.9.1”,构造函数:函数,初始化:函数...] w.html:21 MyPlugin {myoption:“myvalue”,_attachMyPlugin:函数} w.html:16