JavaScript语法:什么是({})它是函数还是对象?

bro*_*ode 3 javascript oop object backbone.js

作为具有OOP背景的开发人员(c#,Java)OOP JavaScript对我来说是疯狂的.我正在努力学习语言的基础,然后跳上图书馆(我错了吗?);

所以,我检查了十几本关于对象,函数等的书籍/教程.了解了几种创建对象的方法,但几乎每个JS库中使用的语法都让我困惑.亦即

var Person = Backbone.extend.Model({
 //pretty complex staff
 })
Run Code Online (Sandbox Code Playgroud)

什么是幕后模特?宾语?功能?

m59*_*m59 13

这不是正确的主干语法.那应该是:

Backbone.Model.extend({

});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,extend是一个函数.请注意,您正在调用它().但是,javascript中的函数也是对象(稍后会详细介绍).你可能会对{}它的内部感到困惑.那是因为您将该对象作为参数传递给函数.

如果extend是一个期望字符串作为参数/参数的函数,它将如下所示:extend('some string').在这种情况下,它是一个对象.例如:

var someObject = {
  someProperty: 'someValue'
}
var Person = Backbone.Model.extend(someObject);
Run Code Online (Sandbox Code Playgroud)

是相同的:

var Person = Backbone.Model.extend({
  someProperty: 'someValue'
});
Run Code Online (Sandbox Code Playgroud)

这里只是一个示例,说明函数的外观:

Backbone.Model.extend = function(obj) {
  console.log(obj.someProperty); //logs "someValue"
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,在javascript中,函数也是对象.实际上,大多数东西都是物体.我建议你研究一下这个.由于这不是你问题的焦点,我只是简单地说明:

var someObj = {
  someProperty: '123'
};
console.log(someObj.someProperty); //logs "123"

var someFunction = function() {

};
someFunction.someProperty = '123';
console.log(someFunction.someProperty); //logs "123"
Run Code Online (Sandbox Code Playgroud)

但是,最好添加到原型中,以便继承可以像这样工作:

someFunction.prototype.someProperty = '123';
var foo = new someFunction();
console.log(foo.someProperty); //logs "123"
Run Code Online (Sandbox Code Playgroud)

这是一个你可以搞砸的小演示(点击).

所以..总之,JavaScript是赢家.