如何实例化对象文字
How to instantiate an object literal
我正在尝试理解对象字面量的基本原理
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
-关键字从构造函数实例化对象。你不能从一个已经是实例的对象中实例化。
相关文章:
- 是否可以将字符串转换为文字对象数组
- jQuery:如何使用文字对象方法中的方法来获取全局变量
- 如何检查文字对象是否在 Javascript 数组中
- Javascript解析序列化的Groovy映射到JS文字对象
- asp.net 文字对象传递给 JavaScript
- 文字对象和jquery选择器DRY
- 将文字/对象/类传递给具有数千次调用的函数的内存含义
- Javascript 文字对象和单例模式
- 如何在 PHP 中将 JavaScript 文字对象转换为 Json 对象
- 将文字对象转换为对象'的属性
- 文字对象中的元素
- 将开关大小写(在c++中)替换为javascript中的文字对象
- 使用函数式编程过滤文字对象
- 关于文字对象,也许还有自动执行函数
- 如何访问“参数”来自闭包的外部函数的文字对象
- 关于文字对象语法的限制
- 在文字对象中创建属性
- JavaScript异步调用文字对象函数
- 文字对象和函数构造函数
- 奇怪的行为和使用Object的多个实例.在文字对象上创建