2015-06-15 29 views
2

我对js来说比较新,基本上我在transport.js这个小动画库中遇到了下面的函数。看看下面的功能:了解一个简单的return.js

function Transform(str) { 
    if (typeof str === 'string') { this.parse(str); } 
    return this; 
    } 

现在this.parse(str),基本上调用其连接到Transform的原型温控功能,你可以看到LINE 422该功能。

现在我在这里的问题是关于this,我已经在线阅读了一些文章,其中显示了如何返回这可用于链接,但我不确定在这种情况下返回这个返回。

当你在这个特定场景中说return this时,你特别想要返回什么?究竟是什么。

我有点明白,回报这个工作有点像这样:

  • 你传递一个对象,变量或东西的功能
  • 功能执行步骤
  • 返回新对象或使用return this进行变量。

但是我仍然不清楚,有人通过我的例子并使用示例上下文来解释我的晶体吗?

P.S.我不是要求解释返回这个,但我要求解释在给定的上下文中返回这个。

回答

3

this.parse(str)最有可能使对象发生变异并返回现在发生变异的结果。这是有用的,像你说的,为chaining function calls像这样:

var obj = Transform('some string').someOtherFunction(); 

someOtherFunc可以某处prototype chain来定义,或者使用某种inheritance strategy,也可能是另一种“父”继承或扩展功能目的。重点在于,当调用someOtherFunc时,会调用已由Transform函数更改的对象。

2

在该上下文中进行转换是可以实例化的对象。一旦实例化,它就拥有自己的属性和自己的生命周期。这是在声明中使用单词function时javascript不清楚的地方。 (相对于这种用法,ES6带来了许多更好的解决方案)。

var transform1 = new Transform("transform1"); 
var transform2 = new Transform("transform2"); 

现在可以单独使用transform1和transform2来调用Transform对象的所有子方法。

转换函数可以看作是一个“构造函数”(虽然它不是在javascript中使用类的官方方式)。没有return this,transform1和transform2将是未定义的。它在这里更多地用于保持新创建的对象的引用而不是真正的链接,其中更多的是使用子方法来做类似的事情:

transform1.submethod1().submethod2();