2

我试图了解对象文字的基础知识

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 =中创建一个全局变量。这将与. 因此,TEST1 工作是合乎逻辑的。var Test =

在 TEST2 中,我尝试实例化文字,但这是不可能的,因为它是一个变量。我从 Backbone.js 中得到了这个想法,下面的代码确实有效

window.Product = Backbone.Model.extend({});
var p = new Product();

我希望 Product 在这里也是一个变量,所以没有办法实例化它。

谁能解释 Backbone 示例和我的示例之间的区别?似乎我错过了对文字的一些基本理解。

4

3 回答 3

3

首先,这与 JSON 无关。那是一种用于表示对象的文本格式。您拥有的是 Javascript 中的对象文字。JSON 格式基于 Javascript 语法,但不是一回事。

您不能实例化对象文字,因为它已经是一个实例。

主干extend方法所做的是它创建了一个将创建对象的函数。该extend方法将返回一个可用于创建实例的函数,因为它会将对象中的所有内容复制Model到它自己的对象中。

于 2013-06-14T09:33:19.483 回答
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();

参考:这里

小提琴:这里

于 2013-06-14T09:37:03.363 回答
1

对象字面量已经是一个实例化的对象

var a = {}

在这方面相当于:

var a = new Object()

所以new {}相当于new (new Object())

-keyword 从构造函数中new实例化对象。您不能从已经是实例的对象实例化某些东西。

于 2013-06-14T09:41:47.880 回答