下面的代码段是来自另一位同事给我的大型图书馆的功能。从原型中的另一个方法调用此函数。 results
参数是一个XML字符串,如下所示:
<spellResult .....>
<c o=0 l=1 s=1>string string string />
<c o=10 l=1 s=1>string string string />
</spellResult>
parseResults: function(results) {
var self = this;
this.results = [];
var spellcheckFound = $(results).find('c');
$(results).find('c').each(function() {
var $this = $(this),
offset = $this.attr('o'),
length = $this.attr('l');
self.results.push({
word: self.text.substr(offset, length),
suggestions: $this.text().split(/\s/)
});
});
this.displayResults();
},
所以:
results
参数与this.results
的区别如何?this.results = [];
不是清除结果参数吗?self.results
是不同的对象/变量,还是对其他对象/变量的引用?$(results)
是什么?我一直在努力让我的头发发挥作用,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
这是为了什么:
var self = this;
this.results = [];
使用this.results = [];
清空array
。
提供正确答案的信息太少,因为我们不知道results
究竟是什么?
正如jasper所说,使用console.log
(console.log(typeof results)
和console.log(results)
进行一些正确的调试,看看有什么进展。
“还有一个新手问题 - 所有这些都是$(结果)?”
$(results)
是results
的对象。基本上$(results).find('c').each(function() {
所做的是找到c
中的元素results
并循环遍历它们。
答案 1 :(得分:0)
'results'参数与'this.results'有何不同?
this.results
指的是this
上名为results的属性。 this
的含义取决于函数的调用方式。 results
是正在处理的XML。称之为results
是不好的命名;一个更好的名字是resultsXML
。
不是'this.results = [];'清除结果参数?
是;代码正在处理XML,将this.results
替换为处理结果。
是'self.results'一个不同的对象/变量,还是对其他一个的引用?
由于self
已分配给this
,self.results
会将同一对象引用为this.results
。使用self
变量是在代码中捕获this
值的常用技术。由于对each
的调用为this
建立了新的含义 - 正在处理的XML元素 - 这就是self
在调用{{1}之前被初始化为this
的原因}}
还有一个新手问题 - 所有这些都是$(结果)?
这是围绕XML创建一个jQuery对象包装器,允许代码在XML中使用jQuery样式的导航。
答案 2 :(得分:0)
1。结果参数与this.results有什么不同?
结果是传递给函数的局部变量。 this.results是一个名为“this”的对象的属性,它是函数本身(javascript中的所有东西都是一个对象,包括函数)
2。不是这行.results = [];清除结果参数?
this.results = [];是声明一个新的空数组对象的简写。请注意,在对象上声明一个新属性时,不需要使用“var”关键字 - 它只是自动创建它,或者如果名称冲突,则覆盖以前的属性。
3。 self.results是一个不同的对象/变量,还是对其他对象的引用?
因为self和this是对同一个对象的引用,this.results和self.results是相同的属性。否则当你说self.results.push(...)
时,你会得到一个“预期的对象”错误4。还有一个新手问题 - 所有这些都是$(结果)?
$(results)将你的javascript对象称为结果并将其包装在jquery对象中,这允许你访问jquery原型函数,如.find()和.each()
在旁注 - 请重写您发布的代码。我眼睛疼。特别是你执行所有处理以初始化spellcheckFound变量然后在下一行再次执行所有处理而不是仅使用spellcheckFound的部分:P