这段代码在幕后发生了什么?

时间:2012-02-28 12:48:51

标签: javascript

每个脚本的幕后情况如何?假设我将getsize()很多,代码之间是否有任何区别:

代码1:

function Size (width, height)
{
    this.width = width;
    this.height = height;
}

function getSize()
{
    return new Size (0, 0);
}

代码2

function getSize ()
{
    return {width: 0; height: 0};
}

我认为它们在所有意义上都是等同的,但只是想检查一下。

2 个答案:

答案 0 :(得分:2)

在第一个代码示例中,您将返回一个名为Size的命名对象,在第二个代码中,您将返回一个匿名javascript对象。因此,您将丢失Size对象构造函数和原型,从而阻碍您进一步扩展所有类似对象。

答案 1 :(得分:1)

它们(基本上)等同于现在,但只有在Size原型发生变化之前。如果在将来的任何时候发生变化,您的{width: 0, height: 0}将会出错,因此最好使用return new Size(0, 0);

唯一真正的区别是Size对象是与通用JS对象不同的对象的实例:

var a = new Size(0,0);
var b = {width:0, height:0};
alert(a == b) // would be false even if JS didn't always say two objects are different (see comments)