了解在Unslider.js中使用new关键字

时间:2015-02-03 08:39:37

标签: javascript jquery

我很难理解我在jQuery插件中找到的语法。以下是语法:

instance = (new Unslider).init(me, o);

在上面的行中init当然是一个函数,其中me = $(this)o是一个对象文字,在调用插件时传递。现在为了理解上述内容,我继续阅读了一些我不确定相关的文章。

我在这里读了一篇很好的文章:simple class instantiating,但我的困惑仍然存在。

如果我翻译这行,我就会遇到简单的英语问题:

我会读到这样的东西:

使实例成为一个新的unlider实例,而不是使用参数(o,me)运行函数init。

但如果我的上述解释是正确的那么,

instance = (new Unslider).init(me, o);

应该重写为

instance = new Unslider;
init(me, o);

回到我的问题,是什么:

instance = (new Unslider).init(me, o);

在做什么?

P.S。如果您能指出任何可以让我对这种语法有更好理解的资源,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

使实例成为一个新的unlider实例,而不是运行该函数   使用参数(o,me)初始化。

你是对的。

它也可以像下面的代码一样重写:

new Unslider().init(me, o);

括号是对表达式结果进行分组的运算符。例如,您也可以这样做:

var result = (1 + 2).toString();

alert(result);

也就是说,添加12所获得的值将作为number返回,您可以调用toString(),因为此函数是JavaScript中任何对象的一部分

(new Unslider)是相同的情况:括号的值是从Unslider原型创建的对象,因此您可以调用整个对象的实例成员(即函数,属性......)

为什么他们决定使用这种语法,而不仅仅是new Unslider().init(me, o),谁知道。恕我直言,我会使用我的选项,因为实例化一个对象,只是不需要括号语法......

附加说明......

你应该知道你将无法这样做:

// This would be using the result of .init(me, o) as the 
// constructor function, and I'm very sure .init(me, o) won't
// return a function, so this would end in a run-time error
new Unslider.init(me, o);

总之,new关键字应该与函数一起使用,当在new表达式中使用函数时,所谓的函数变成构造函数

您可能会了解有关构造函数和原型here的更多信息。