我刚刚得到了道格拉斯·克罗克福德的Javascript:The Good Parts,我很难理解他关于原型的一个例子.书中的代码如下:
if (typeof Object.create !== "function") {
Object.create = function(o) {
var F = function () {}
F.prototype = o;
return new F;
};
}
Run Code Online (Sandbox Code Playgroud)
我假设这段代码用于定位函数的原型.但为什么要使用这种复杂的方法呢?为什么不直接使用variable
.prototype?Crockford是Javascript领域的领先专家,所以我确信有充分的理由使用这个模型.谁能帮助我更好地理解它?任何帮助,将不胜感激.
在ECMAScript 3中,new
运算符是设置对象[[Prototype]]
内部属性的唯一标准方法,在这种情况下,Crockford只是为此目的使用临时构造函数 F
.
该o
方法的参数被设置为prototype
临时构造函数的属性,并通过调用new F();
它构建一个继承自的新空对象F.prototype
(有关如何工作的更多详细信息,请参阅此问题new
).
例如:
var a = { a: 1 };
var b = Object.create(a); // b inherits from a
b.a; // 1
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们可以说b
内部[[Prototype]]
属性指向a
.
Object.getPrototypeOf(b) === a; // true
Run Code Online (Sandbox Code Playgroud)
换句话说,b
继承自a
.
使用相同的示例,我们可以使用空构造函数,例如:
function F(){}
F.prototype = a;
var b = new F(); // b again inherits from a (F.prototype)
Run Code Online (Sandbox Code Playgroud)
还要记住prototype
,函数的[[Prototype]]
属性与所有对象具有的prototype
属性不同,函数的属性在使用new运算符调用时使用,以构建从该属性继承的新对象.
此外,请注意,现在,ECMAScript 5标准正在实施,并且此垫片不符合规范100%,事实上,标准Object.create
方法的某些功能无法在ES3上模拟.
也可以看看:
归档时间: |
|
查看次数: |
311 次 |
最近记录: |