jquery函数参数,对象和变量

时间:2011-12-22 19:36:52

标签: jquery jquery-plugins

下面的代码段是来自另一位同事给我的大型图书馆的功能。从原型中的另一个方法调用此函数。 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();
},

所以:

  1. results参数与this.results的区别如何?
  2. this.results = [];不是清除结果参数吗?
  3. self.results是不同的对象/变量,还是对其他对象/变量的引用?
  4. 还有一个新手问题 - 这一切中$(results)是什么?
  5. 我一直在努力让我的头发发挥作用,所以任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

这是为了什么:

 var self = this;
 this.results = [];

使用this.results = [];清空array

提供正确答案的信息太少,因为我们不知道results究竟是什么?

正如jasper所说,使用console.logconsole.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已分配给thisself.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