JavaScript函数称为对象,小写“o”

时间:2011-11-03 18:49:01

标签: javascript prototypal-inheritance

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

var objB = object(objA);

objB的内部[[prototype]]引用设置为objA,尽管他没有明确表达它。

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

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

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

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

var objB = Object.create(objA);

或者是否有一些细微差别?

2 个答案:

答案 0 :(得分:3)

这两个函数是同一个,并且都没有内置到JavaScript中。请参阅Crockford的article,其中描述了他为何在不同的命名约定之间切换。

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

答案 1 :(得分:1)

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

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

此外,您可以将“function”视为指定新类型对象的指令,如果您使用new关键字,则实际是对象的构造函数。如果您不使用新关键字和呼叫功能,如下面的示例

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

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