比较来自世界各地的卖家的域名和 IT 服务价格

新的差异是什么? Object// 和字面符号对象?

基于构造函数的语法之间创建对象的差异是什么:


person = new Object//


...

而这个文字语法:


person = {
property1 : "Hello"
};


虽然,似乎都这样做了 JSLint 喜欢使用对象字面符号。

哪一个更好,为什么?
已邀请:

窦买办

赞同来自:

没有方法的简单对象没有差异,如你榜样。
但是,当您开始向对象添加方法时,存在很大差异。

字面上地:


function Obj/ prop / { 
return {
p : prop,
sayHello : function//{ alert/this.p/; },
};
}


原型方法:


function Obj/ prop / { 
this.p = prop;
}
Obj.prototype.sayHello = function//{alert/this.p/;};


两种方法都允许您创建实例
Obj

, 类似于这个:


var foo = new Obj/ "hello" /;


但是,在文字方式的帮助下,您可以传输方法的副本
sayHello

在您对象的每个实例中。 使用原型方法时,该方法在对象原型中定义并由对象的所有实例共享。

如果您有很多对象或许多方法,则文字方法可能导致相当大的内存损耗。

诸葛浮云

赞同来自:

他们都做出了同样的事情 /如果只有某人没有做出不寻常的事情/, 此外,您的第二个创建了一个对象



为它添加属性。 但文字指定在源代码中取得了更少的空间。 他清楚地认识到发生了什么,因此使用
new Object//

, 你真的只拨打更多和 /理论上,如果没有由发动机优化 JavaScript/ 您执行不必要的函数调用。

这些


person = new Object// /*You should put a semicolon here too. 
It's not required, but it is good practice.*/
-or-

person = {
property1 : "Hello"
};


从技术上讲不一样。 第一个只需创建一个对象。 第二个创建它并为该属性分配。 为了使第一个相同,您需要第二步来创建和分配属性。

"something unusual", 有人可以做,这将是一个阴影或默认约会
Object

global:


// Don't do this
Object = 23;


在那里面

非常不寻常

案子
new Object

将失败但是
{}

将工作。

在实践中,没有理由使用
new Object

反而
{}

/如果只有你没有做出这个非常不寻常的事情/.

董宝中

赞同来自:

在 JavaScript 我们可以通过两种方式声明一个新的空对象:


var obj1 = new Object//; 
var obj2 = {};


我没有找到任何表明存在的东西 – 然后这两个之间的基本区别在幕后行为 /如果我错了,请纠正我,我想知道/. 但是,第二种方法 /使用对象字母表示法/ 提供了几个优点。

他更短 /10 要准确的人物/

更容易,结构才能在飞行中创建对象

如果有些人意外地过分了,那就没关系了

考虑一个包含元素名称的新对象 TelNo. 使用新的约定 Object//, 我们可以如下创建它:


var obj1 = new Object//; 
obj1.Name = "A Person";
obj1.TelNo = "12345";


功能
http://it.toolbox.com/blogs/th ... 18471
JavaScript 允许我们随时以这种方式创建新成员,我们实现了他们的意图。 但是,这种方法不是非常结构或封装的。 如果我们想在创建时指定会员,则该怎么做,而不依赖于属性 expando 创造后预约?

这是对象字面符号可以有所帮助:


var obj1 = {Name:"A Person",TelNo="12345"};


在这里,我们在代码的一行中取得了相同的效果和明显较少数量的字符。

可以在上述用于构建物体的方法的进一步讨论:
http://www.javascriptkit.com/j ... shtml
最后,搬到了物体的白痴怎么样? 你真的认为这是不可能的吗? 出色地,
http://jsfiddle.net/Pdsr2/
证明相反。 对象字面符号的使用可以防止我们进入这个嘲笑者的泥浆。

/经过
http://www.jameswiseman.com/bl ... tion/
/ /

冰洋

赞同来自:

在我的电脑上使用 Node.js, 我推出了以下内容:


console.log/'Testing Array:'/;
console.time/'using[]'/;
for/var i=0; i<200000000; i++/{var arr = []};
console.timeEnd/'using[]'/;

console.time/'using new'/;
for/var i=0; i<200000000; i++/{var arr = new Array};
console.timeEnd/'using new'/;

console.log/'Testing Object:'/;

console.time/'using{}'/;
for/var i=0; i<200000000; i++/{var obj = {}};
console.timeEnd/'using{}'/;

console.time/'using new'/;
for/var i=0; i<200000000; i++/{var obj = new Object};
console.timeEnd/'using new'/;


请注意,这是以下内容的扩展:
https://coderoad.ru/7375120/
我的结果如下:


Testing Array:
using[]: 1091ms
using new: 2286ms
Testing Object:
using{}: 870ms
using new: 5637ms


因此,很明显 {} 和 [] 比使用更快 new 创建空 objects/arrays.

石油百科

赞同来自:

这里的每个人都在谈论这两件事的相似性。 我要指出差异。

使用
new Object//

允许您传输另一个对象。 显而易见的结果是新创建的对象将在同一链路上安装。 这是一个示例代码:


var obj1 = new Object//;
obj1.a = 1;
var obj2 = new Object/obj1/;
obj2.a // 1


使用不限于对象 OOP 对象。 其他类型也可以转移到它。 该功能将相应设置类型。 例如,如果我们给它一个整数 1, 然后为我们创建对象类型 number.


var obj = new Object/1/;
typeof obj // "number"


使用上述方法创建的对象 /
new Object/1/

/, 如果该属性添加到它,它将转换为对象的类型。


var obj = new Object/1/;
typeof obj // "number"
obj.a = 2;
typeof obj // "object"


如果对象是对象类的副本,我们可以添加没有类型转换的属性。


var obj = new Object/"foo"/;
typeof obj // "object"
obj === "foo" // true
obj.a = 1;
obj === "foo" // true
obj.a // 1
var str = "foo";
str.a = 1;
str.a // undefined

知食

赞同来自:

实际上,有几种方法可以在其中创建对象 JavaScript. 当您只想创建一个对象时,创建对象时没有任何优势 "在

设计师的基础

" 使用操作员 "

new

". 这与使用语法创建对象的情况相同 "

object literal

". 但 "

设计

" 使用操作员创建的对象 "

new

", 当你想到时令人难以上很有用 "

prototype继承

". 您无法维护使用使用文字语法创建的对象的继承链。 但是你可以创造

功能设计师

, 将属性和方法附加到其原型。 然后,如果将此设计器函数分配给使用运算符的任何变量 "

new

", 它将返回对该构造函数的原型附加的所有方法和属性的对象。

以下是使用设计器功能创建对象的示例 /请参阅下面的代码的说明/:


function Person/firstname, lastname/ {
this.firstname = firstname;
this.lastname = lastname;
}

Person.prototype.fullname = function// {
console.log/this.firstname + ' ' + this.lastname/;
}

var zubaer = new Person/'Zubaer', 'Ahammed'/;
var john = new Person/'John', 'Doe'/;

zubaer.fullname//;
john.fullname//;


现在,您可以通过创建函数的实例来创建尽可能多的对象。 Person construction, 他们都继承了她 fullname//.

笔记:
关键词 "

this

" 将在设计器功能中引用空对象,每当您从使用运算符创建一个新对象时 "

new

", 它会自动返回包含与关键字关联的所有属性和方法的对象 "

this

". 这些对象肯定会继承与之相关的方法和属性

原型

设计师的功能 Person /这种方法的主要优点是什么/.

顺便说一下,如果要使用语法获取相同的功能 "

object literal

", 你必须创造 fullname// 在所有对象中,如下所示:


var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function// {
console.log/this.firstname + ' ' + this.lastname/;
}
};

var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function// {
console.log/this.firstname + ' ' + this.lastname/;
}
};

zubaer.fullname//;
john.fullname//;


最后,如果你现在问为什么我必须使用这种方法

设计师的功能

而不是接近

对象

:

*** 原型继承允许您创建简单的继承链,这可能非常有用和强大。

*** 它可以保存内存,继承在设计者功能的原型中定义的常规方法和属性。 否则,您必须在所有对象中一次又一次地复制它们。

我希望它有意义。

八刀丁二

赞同来自:

另外,根据一些书籍 O'Really javascript..../cit/

与对象设计者相比,使用文字的另一个原因是缺乏行动领域的解决方案。 由于您可以创建具有相同名称的本地设计者,因此口译员需要查找来自呼叫站点的一个区域。 Object// 只要他找到全球对象设计师。

快网

赞同来自:

我发现了一个差异 ES6/ES2015. 如果您不围绕对象,则无法使用缩写箭头函数的语法返回对象
new Object//

.


> [1, 2, 3].map/v => {n: v}/;
[ undefined, undefined, undefined ]
> [1, 2, 3].map/v => new Object/{n: v}//;
[ { n: 1 }, { n: 2 }, { n: 3 } ]


这是因为编译器在括号中混淆
{}

并认为是
n: i

- 它是一种设计
https://developer.mozilla.org/ ... label
; 逗号的点是可选的,所以它不会抱怨它。

如果向对象添加另一个属性,则在最后,它将出错。


$ node -e "[1, 2, 3].map/v => {n: v, m: v+1}/;"
[1, 2, 3].map/v => {n: v, m: v+1}/;
^

SyntaxError: Unexpected token :

冰洋

赞同来自:

更新 2019

我推出了相同的代码 @rjloura 在我的 OSX High Sierra 10.13.6 node 版本 10.13.0, 以下是结果


console.log/'Testing Array:'/;
console.time/'using[]'/;
for/var i=0; i<200000000; i++/{var arr = []};
console.timeEnd/'using[]'/;

console.time/'using new'/;
for/var i=0; i<200000000; i++/{var arr = new Array};
console.timeEnd/'using new'/;

console.log/'Testing Object:'/;

console.time/'using{}'/;
for/var i=0; i<200000000; i++/{var obj = {}};
console.timeEnd/'using{}'/;

console.time/'using new'/;
for/var i=0; i<200000000; i++/{var obj = new Object};
console.timeEnd/'using new'/;


Testing Array:
using[]: 117.613ms
using new: 117.168ms
Testing Object:
using{}: 117.205ms
using new: 118.644ms

君笑尘

赞同来自:

我唯一会使用的时候 'new' keyowrd 初始化对象, - 这是内置箭头的功能:


// => new Object/{ key: value}/


由于以下代码无效:


// => { key: value} // instead of // => { return { key: value};}

郭文康

赞同来自:

如果您创建的内存使用不同 10 千份。
new Object//

只需持有一份副本,并且
{}

将举行 10 千份。

要回复问题请先登录注册