如何实例化对象文字

How to instantiate an object literal

本文关键字:文字 对象 实例化      更新时间:2023-09-26

我正在尝试理解对象字面量的基本原理

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的例子和我的例子的区别?看来我错过了一些对字面量的基本理解。

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

你不能实例化一个对象字面量,因为它已经是一个实例了。

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

是的,它不是一个函数,它是一个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

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

var a = {}

在这方面相当于:

var a = new Object()

所以new {}等于new (new Object())

new -关键字从构造函数实例化对象。你不能从一个已经是实例的对象中实例化。