javascript - 基本对象/函数链在 JavaScript 中是如何工作的?

标签 javascript methods chaining method-chaining

我试图在脑海中直接理解执行 jQuery 风格函数链接的原则。我的意思是:

var e = f1('test').f2().f3();

我得到了一个示例,而另一个则没有。我会在下面发布这些。我总是想学习一些东西如何工作的第一原则基础,这样我就可以在它之上进行构建。到目前为止,我对链接的工作原理只有粗略和粗略的了解,而且我遇到了无法智能排除故障的错误。

我知道的:

  1. 函数必须返回自己,也就是“返回这个;”
  2. 可链接的函数必须驻留在父函数中,也就是在 jQuery 中,.css() 是 jQuery() 的子方法,因此 jQuery().css();
  3. 父函数应返回自身或自身的新实例。

这个例子有效:

var one = function(num){
    this.oldnum = num;

    this.add = function(){
        this.oldnum++;
        return this;
    }

    if(this instanceof one){
        return this.one;    
    }else{
        return new one(num);    
    }
}
var test = one(1).add().add();

但这个不是:

var gmap = function(){

    this.add = function(){
        alert('add');

        return this;    
    }   

    if(this instanceof gmap) {
        return this.gmap;   
    } else{
        return new gmap();  
    }

}
var test = gmap.add();

最佳答案

在 JavaScript 中,函数是一流的对象。当您定义一个函数时,它就是该函数对象的构造函数。换句话说:

var gmap = function() {
    this.add = function() {
        alert('add');
    return this;
    }

    this.del = function() {
       alert('delete');
       return this;
    }

    if (this instanceof gmap) {
        return this.gmap;
    } else {
        return new gmap();
    }
}
var test = new gmap();
test.add().del();

通过分配

new gmap();
对于变量 test,您现在已经构建了一个新对象,它“继承”了 gmap() 构造函数(类)的所有属性和方法。如果您运行上面的代码片段,您将看到“添加”和“删除”的警报。

在您上面的示例中,“this”指的是窗口对象,除非您将函数包装在另一个函数或对象中。

一开始我很难理解链接,至少对我来说是这样,但是一旦理解了它,我就意识到它是一个多么强大的工具。

关于javascript - 基本对象/函数链在 JavaScript 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965781/

相关文章:

python - 如何链接多个函数并从每个函数返回多个元组?

javascript - 链式 jquery deferred.then() 未返回正确的 promise

javascript - 使用jquery通过填充颜色选择Svg路径

java - 程序可以编译,但表格不会打印出来

javascript - 继续清除的 setIntervall 而不是重置它

string - AppleScript:字符串中子字符串的索引

Java集合GC

Python。 subprocess.Popen 的第二步截断第一步的结果

javascript - 按时间间隔转储 SQLite 数据库

javascript - Ionic 基础知识 - 基本应用程序应使用哪些元素?