【发布时间】:2010-02-10 01:35:53
【问题描述】:
这可能吗?
我的想法:原型本质上是构造函数的属性(无论是原生构造函数,如函数、字符串或对象,还是您自己的自定义构造函数),只有“新”关键字才能利用构造函数及其对象原型创作
我错过了什么吗?
【问题讨论】:
标签: javascript
这可能吗?
我的想法:原型本质上是构造函数的属性(无论是原生构造函数,如函数、字符串或对象,还是您自己的自定义构造函数),只有“新”关键字才能利用构造函数及其对象原型创作
我错过了什么吗?
【问题讨论】:
标签: javascript
你是对的,但是现在在 ECMAScript 第 5 版中,Object.create 方法能够使用另一个对象作为原型来创建对象实例:
var proto = {foo: 1};
var obj = Object.create(proto);
在上面的例子中,obj 将被创建,它会在[[Prototype]] 内部属性中包含对proto 的引用,并且:
obj.foo; // 1
obj.hasOwnProperty('foo'); // false
此方法来自 2009 年 12 月批准的新规范,据我所知,现在可用于 Mozilla JavaScript 1.9.3 实现。
现在您可以通过 Douglas Crockford 的建议来模仿该方法的行为:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
【讨论】:
F)存储在关闭,然后被重用。这使得实现更高效的内存(和运行时)。另请注意,Crockford 的 Object.create 仿真几乎不符合 ES5(不支持第二个参数,如果第一个参数不是对象则不进行类型检查以抛出 TypeError 等)。谨慎使用;)