var f = function();
var instance = new f();
如果您知道instance
类函数的名称,您可以简单地访问原型:
var prototype = f.prototype;
prototype.someMember = someValue;
如果您不这样做:
1)
var prototype = Object.getPrototypeOf(instance);
prototype.someMember = someValue;
2)或
var prototype = instance.__proto__;
prototype.someMember = someValue;
3)或
var prototype = instance.constructor.prototype; // works only if constructor is properly assigned and not modified
prototype.someMember = someValue;
为了兼容性,您可以将以下代码段放入您的代码中(并始终Object.getPrototypeOf(instance)
用于返回原型):
if(!Object.getPrototypeOf) {
if(({}).__proto__ === Object.prototype && ([]).__proto__ === Array.prototype) {
Object.getPrototypeOf = function getPrototypeOf(object) {
return object.__proto__;
};
} else {
Object.getPrototypeOf = function getPrototypeOf(object) {
// May break if the constructor has been changed or removed
return object.constructor ? object.constructor.prototype : void 0;
};
}
}
更新:
根据 ECMA-262 第 6 版(2015 年 6 月)__proto__
,属性被标准化为 Web 浏览器的附加功能。所有最新版本的顶级浏览器现在都支持它。阅读更多关于__proto__
: