2016-03-07 38 views
-1

我是面向对象的js的新手。在我的工作中,我必须编辑一些其他人完成的代码。由于我是这个领域的新手,无法理解一些结构和符号。贝娄的结构,我无法处理,面向对象的结构js

(function ($) { 
    AjaxSolr.GenericGraphWidget = AjaxSolr.AbstractFacetWidget.extend({ 

     _functionName:function(){ 
     } 

    })(jQuery); 

现在,这里AjaxSolr是这是在另一个文件中定义的基类。 AbstractFacetWidget也是从AjaxSolr延伸的类。现在任何人都可以解释一下,这是什么样的结构?(我只知道这是一种类,就像其他类的oop语言一样)。 (function ($)是什么意思?

我所知道的现在,直到创建对象和继承我要做像以下各项

var Constructor = function(name) { 
    this.name = name 
}; 

Constructor.prototype.mymethod = function() { 
    alert("my name is : " + this.name); 
}; 

var obj = new Constructor("foo"); 
obj.mymethod(); 

可能是他们使用,我不知道另一种格式。如果我想从该课外调用该课程的功能,我该怎么做?如果我的问题解释不好,请问我。

+1

我看你是来自OOP语言。我的建议是不用构造函数,只是学会阅读它,因为很多人没有理由使用它。至于你自己使用工厂功能。 – PVL

+1

相关:http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript – charlietfl

回答

0

通常,.extend({...})表示“取其原型并合并提供的对象”。所以extend创建一个新的对象,并设置为AjaxSolr.GenericGraphWidget。这样,您可以像其他OOP语言中常见的那样执行类似于继承的操作。

我想你删除了一些部分,所以我希望以下适用于您的具体示例:(function ($) { ... })(jQuery);是一种编写立即调用的函数表达式的方法:它创建一个匿名函数(function ($) { ... have $ available here ... })并直接调用它参数(在这种情况下为jQuery)。

+0

因此,当我加载页面这个函数被调用与“jquery”参数$赋予“jquery”。不是吗? –

+0

是的,在这种情况下'$ === jQuery'。 – Narigo

+0

嗨,另一件事,是AjaxSolr.GenericGraphWidget是一个类?我可以创建对象var a = new AjaxSolr.GenericGraphWidget();这个。我必须在某个事件触发后调用其中的函数。 –