我最近Object.create()在JavaScript中偶然发现了这个方法,并试图推断它与创建一个对象的新实例有什么不同new SomeFunction(),当你想要使用另一个时.
请考虑以下示例:
var test = {
val: 1,
func: function() {
return this.val;
}
};
var testA = Object.create(test);
testA.val = 2;
console.log(test.func()); // 1
console.log(testA.func()); // 2
console.log('other test');
var otherTest = function() {
this.val = 1;
this.func = function() {
return this.val;
};
};
var otherTestA = new otherTest();
var otherTestB = new otherTest();
otherTestB.val = 2;
console.log(otherTestA.val); // 1
console.log(otherTestB.val); // 2
console.log(otherTestA.func()); // 1
console.log(otherTestB.func()); // 2Run Code Online (Sandbox Code Playgroud)
请注意,在两种情况下都观察到相同的行为.在我看来,这两种情况之间的主要区别是:
Object.create()实际使用的对象实际上形成了新对象的原型,而在new …我运行此代码并得到以下结果.我很想知道为什么[]更快?
console.time('using[]')
for(var i=0; i<200000; i++){var arr = []};
console.timeEnd('using[]')
console.time('using new')
for(var i=0; i<200000; i++){var arr = new Array};
console.timeEnd('using new')
Run Code Online (Sandbox Code Playgroud)
[]:299msnew:363ms感谢Raynos,这里是此代码的基准,以及一些更可行的方法来定义变量.

我对在javascript中创建对象的方式感到困惑.似乎至少有两种方式.一种是使用对象文字符号,而另一种是使用构造函数.一个优于另一个有优势吗?
是不是......
var obj = new Object();
obj.function1 = function(){
//code
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西?
我正在阅读我的第一个Javascript教程.
我刚刚发现了两种创建JS对象的方法.
var person = new Object();
person.name = "Tom";
person.age = "17";
Run Code Online (Sandbox Code Playgroud)
和
var person = {};
person.name = "Tom";
person.name = "17"
Run Code Online (Sandbox Code Playgroud)
这两种对象创建方式有何不同?由于第二个看起来更简单,我们是否可以在任何条件下使用它?
可能重复:
创建对象 - 新对象或对象文字符号?
以下是什么区别:
var myData = new Object();
myData["name"] = "ATOzTOA";
myData["site"] = "atoztoa";
Run Code Online (Sandbox Code Playgroud)
和
var myData = {};
myData["name"] = "ATOzTOA";
myData["site"] = "atoztoa";
Run Code Online (Sandbox Code Playgroud)
更新
我得到的是......
var myData = {
"name" : "ATOzTOA",
"site" : "atoztoa",
};
Run Code Online (Sandbox Code Playgroud)
是一个快捷方式
var myData = new Object({
"name" : "ATOzTOA",
"site" : "atoztoa",
});
Run Code Online (Sandbox Code Playgroud)
我对吗?
两者都将检测对象而不是基元.
这似乎是一种纯粹的语法差异.
// jslint prefers {}.constructor(obj) over Object(obj)
// called isObject by underscore
// will test only for objects that have writable keys
// for example string literals will not be detected
// but arrays will
var isWritable = function (obj) {
return {}.constructor(obj) === obj;
};
Run Code Online (Sandbox Code Playgroud) 写作更好吗?
var arr=[]; then var arr=new Array();
var obj={}; then var obj=new Object();
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我阅读了关于这个想法的幻灯片第36页,但没有给出解释或示例为什么它更好.
什么时候Javascript数据类型应该声明为对象?它们会降低执行速度,并产生令人讨厌的副作用,为什么这可能呢?
根据W3Schools:http://www.w3schools.com/js/js_numbers.asp
也来自http://www.w3schools.com/js/js_datatypes.asp
