我正在尝试理解对象文字的基础知识
window.Test = ({
attribute1:'This is',
attribute2:'a test',
function1: function(){
alert(this.attribute1 + ' ' + this.attribute2);
}
});
//TEST 1
Test.function1(); // "This is a test"
//TEST 2
var tester = new Test(); //ERROR: Object is not a function
tester.function1();
如果我理解正确window.Test =
在窗口对象中创建一个全局变量。
它与var Test =
相同。因此,TEST1的工作原理是合乎逻辑的。
在TEST2中,我尝试实例化文字,但这是不可能的,因为它是一个变量。我从Backbone.js那里得到了以下代码可以工作的想法:
window.Product = Backbone.Model.extend({});
var p = new Product();
我希望Product也是一个变量,所以无法实例化它。
有谁可以解释Backbone示例和我的示例之间的区别?我似乎错过了对文字的一些基本理解。
答案 0 :(得分:3)
首先,这与JSON无关。这是用于表示对象的文本格式。你拥有的是Javascript中的对象文字。 JSON格式基于Javascript语法,但它不是一回事。
您无法实例化对象文字,因为它已经是一个实例。
骨干extend
方法的作用是创建一个将创建对象的函数。 extend
方法将返回一个可用于创建实例的函数,因为它会将Model
对象中的所有内容复制到自己的对象中。
答案 1 :(得分:1)
是的,它不是一个函数,它是一个js对象并且克隆它使用它:
window.Test = ({
attribute1:'This is',
attribute2:'a test',
function1: function(){
alert(this.attribute1 + ' ' + this.attribute2);
}
});
//TEST 1
Test.function1(); // "This is a test"
//TEST 2
var tester = $.extend(true,{}, Test);
tester.function1();
参考:here
小提琴:here
答案 2 :(得分:1)
对象文字已经是实例化对象
var a = {}
在这方面,相当于:
var a = new Object()
所以new {}
相当于new (new Object())
new
- 关键字从构造函数实例化对象。您无法从已经是实例的对象中实例化某些内容。