“函数调用后的括号”是否正确/合法地使用了JavaScript?

时间:2010-12-25 07:52:05

标签: javascript inheritance parentheses

  

可能重复:
  Javascript syntax I haven't seen till now, what does it do really?

我正在检查一个名为def.js的库,它使JavaScript对象以类似于Ruby的方式继承。但我无法得到的是在提供的示例中使用JavaScript的方式:

def ("Person") ({
    init: function(name){
        this.name = name;
    },

    speak: function(text){
        alert(text || "Hi, my name is " + this.name);
    }
});

def ("Ninja") << Person ({
    init: function(name){
        this._super();
    },

    kick: function(){
        this.speak("I kick u!");
    }
});

var ninjy = new Ninja("JDD");

ninjy.speak();
ninjy.kick();
总之,这两点是:

  1. def(“人”)({}); //函数调用后的括号
  2. def(“Ninja”)&lt;&lt;人({}); //由运算符&lt;&lt;
  3. 分隔的两个函数调用

    这是JavaScript的正确/合法使用吗?如果是,那是什么意思,即浏览器如何解释。

1 个答案:

答案 0 :(得分:2)

def("Person")({...});

基本上是链式函数调用。这意味着:

  1. 将字符串"Person"传递给函数调用def()
  2. def()返回一个可以调用的函数。
  3. 将对象{...}作为参数传递给def()返回的函数。
  4. 不确定<<运算符,因为之前我没有在JS中遇到它。我认为这是左移位运算符,但我不知道它如何应用于函数。