3

我刚刚观看了 Douglas Crockford 的介绍性 JavaScript讲座,他在其中提到了一个名为的函数,该函数object应该用于创建一个链接到作为其参数的对象的新对象。我猜他的意思是如果我说

var objB = object(objA);

objB内部[[prototype]]参考设置为objA,尽管他没有明确地这样表述。

另一方面,我读过他的,他根本没有提到这样的函数,而是提出了他自己的从原型创建对象的方法,定义了以下函数:

Object.create = function(o) {
   var F = function() {};
   F.prototype = o;
   return new F();
}

本质上利用了操作符的行为,它将新创建的对象new的内部链接设置为构造函数的属性指向的任何内容。[[prototype]]prototype

我的问题是他为什么要省略内置函数并发明自己的方式来做同样的事情。以前的object函数调用真的等同于

var objB = Object.create(objA);

还是有一些细微的差别?

4

2 回答 2

3

这两个函数是一回事,都不是 JavaScript 内置的。请参阅 Crockford 的文章,其中描述了他在不同命名约定之间切换的原因。

从未来编辑:我看到了这个旧答案,并想指出Object.create()确实是一种原生(并且非常重要)的 ES5 方法。

于 2011-11-03T19:08:39.503 回答
1

没有区别。这是“简化”的解释:

问题是,javascript 中的所有内容都是一个对象,并且继承自Object.

您也可以将“函数”视为定义新类型对象的指令,如果您使用 new 关键字,则实际上是对象的构造函数。如果您不使用 new 关键字并调用函数,如下例所示

function doSomething(){
  alert("works");
}

javascript引擎将创建包含prototype属性的对象doSomething,这个原型是对象doSomething的定义类型,它包含由javascript开发人员使用上面的代码创建的构造函数。对于内置函数或原型,构造函数具有本机代码

于 2011-11-03T19:13:46.360 回答