我在搜索其他问题时,他们的“这个”问题并不是很相似。也谷歌搜索,但不是真的了解。
this
在哪里推荐?正如quirksmode所说
..这总是指我们正在执行的功能的“所有者”, 或者更确切地说,对于一个函数是一个方法的对象。
对于像我这样的新手,它仍然令人困惑。代码是:
var Yourlib = (function() {
var elementSelected = [],
totalElement = 0;
function yourQSA(str) {
elementSelected = document.querySelectorAll(str);
totalElement = elementSelected.length;
return this // this#1 , where is "THIS" referencing to??
}
return {
byClass : function(str) {
elementSelected = document.getElementsByClassName(str);
totalElement = elementSelected.length;
return this; // this#2, the "THIS" is referencing to "Yourlib" obj
},
qsa : yourQSA,
setColor: function(clr) {
var n = 0;
for ( ; n < totalElement; n++ ) {
elementSelected[n].style.color = clr;
}
return this;
}
}
}());
问题:这个引用的#1在哪里?或者写return Yourlib;
而不是return this;
更好吗? (我们想链接方法)
谢谢
*注意,目标是创建链接方法。像Yourlib.byClass('yourclass').setColor('#ff0000');
这样的东西
答案 0 :(得分:1)
一旦将两个函数作为对象的方法调用,this#1
和this#2
将是同一个对象
Yourlib.byClass('yourclass').setColor('#ff0000');
Yourlib.qsa('.yourclass').setColor('#ff0000');
请注意,如果您执行类似
的操作var qsa = Yourlib.qsa;
qsa('.yourclass').setColor('#ff0000');
它不会起作用,因为你没有将函数作为对象的方法调用。
您还可以使用apply
,bind
和call
等函数在函数中设置this
(上下文)
var qsa = Yourlib.qsa;
qsa.call(Yourlib, '.yourclass').setColor('#ff0000');
qsa.apply(Yourlib, ['.yourclass']).setColor('#ff0000');
(qsa.bind(Yourlib))('.yourclass').setColor('#ff0000');
答案 1 :(得分:0)
答案 2 :(得分:0)
this
#1引用了Yourlib类型的对象,即它是“实例”。
this
#2引用了由return { .... }
这个概念是这样的:http://jsfiddle.net/MqqHY/
您可能会改变这种情况,但基本上,我认为您的目标代码存在一些缺陷,因为
var Yourlib = (function() {
...
}());
意味着您是立即执行此操作而不是仅定义新类?