关于javascript练习的困惑

前端之家收集整理的这篇文章主要介绍了关于javascript练习的困惑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚得到了道格拉斯·克罗克福德的 Javascript:The Good Parts,我很难理解他关于原型的一个例子.书中的代码如下: @H_502_2@if (typeof Object.create !== "function") { Object.create = function(o) { var F = function () {} F.prototype = o; return new F; }; }

我假设这段代码用于定位函数的原型.但为什么要使用这种复杂的方法呢?为什么不使用variable.prototype? Crockford是Javascript领域的领先专家,所以我确信有充分的理由使用这个模型.谁能帮助我更好地理解它?任何帮助,将不胜感激.

解决方法

在ECMAScript 3中,new运算符是设置对象[[Prototype]]内部属性的唯一标准方法,在这种情况下,Crockford只是为此目的使用临时构造函数F.

方法的o参数被设置为临时构造函数的prototype属性,并通过调用new F();它构建了一个继承自F.prototype的新空对象(有关新工作原理的详细信息,请参阅this question).

例如:

@H_502_2@var a = { a: 1 }; var b = Object.create(a); // b inherits from a b.a; // 1

在上面的例子中,我们可以说b的内部[[Prototype]]属性指向a.

@H_502_2@Object.getPrototypeOf(b) === a; // true

换句话说,b继承自a.

使用相同的示例,我们可以使用空构造函数,例如:

@H_502_2@function F(){} F.prototype = a; var b = new F(); // b again inherits from a (F.prototype)

还要记住,函数的prototype属性与所有对象都具有的[[Prototype]]属性不同,函数的prototype属性在使用new运算符调用时用于构建从该属性继承的新对象.

此外,请注意,现在,ECMAScript 5标准正在实施,并且此垫片不符合规范100%,事实上,标准Object.create方法that cannot be emulated on ES3有一些功能.

也可以看看:

> JavaScript prototype limited to functions?

原文链接:https://www.f2er.com/js/149929.html

猜你在找的JavaScript相关文章