如何实例化对象文字

时间:2013-06-14 09:24:19

标签: javascript backbone.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 = 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示例和我的示例之间的区别?我似乎错过了对文字的一些基本理解。

3 个答案:

答案 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 - 关键字从构造函数实例化对象。您无法从已经是实例的对象中实例化某些内容。