我很难理解我在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。如果您能指出任何可以让我对这种语法有更好理解的资源,我将不胜感激。
答案 0 :(得分:1)
使实例成为一个新的unlider实例,而不是运行该函数 使用参数(o,me)初始化。
你是对的。
它也可以像下面的代码一样重写:
new Unslider().init(me, o);
括号是对表达式结果进行分组的运算符。例如,您也可以这样做:
var result = (1 + 2).toString();
alert(result);
也就是说,添加1
和2
所获得的值将作为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的更多信息。