如何在javascript中访问对象原型?

如何在javascript中访问对象原型?,javascript,prototype,prototypal-inheritance,Javascript,Prototype,Prototypal Inheritance,在所有的文章中都提到JavaScript是一种基于原型的语言,这意味着每个对象都有一个原型(或者更准确地说,原型链) 到目前为止,我已经尝试了以下代码片段: var F = function(); F.prototype.member1 = 1; var object1 = new F(); console.log(object1.member1); // prints 1 如何访问object1的原型对象?有没有一种浏览器中立的方式可以做到这一点(我的意思是,不依赖于\uuuuu proto

在所有的文章中都提到JavaScript是一种基于原型的语言,这意味着每个对象都有一个原型(或者更准确地说,原型链)

到目前为止,我已经尝试了以下代码片段:

var F = function();
F.prototype.member1 = 1;
var object1 = new F();
console.log(object1.member1); // prints 1
如何访问
object1
的原型对象?有没有一种浏览器中立的方式可以做到这一点(我的意思是,不依赖于
\uuuuu proto\uuuuuuu
属性?参见链接,但可能自2010年以来有了新的发展)如果我不能,你能分享一下引擎盖背后的原理吗

var F = function(){};
var object1 = new F();
alert(object1.constructor === F);
alert(object1.constructor.prototype === F.prototype);
如果您知道
实例
类函数的名称,您可以通过以下方式访问prototype:

var prototype = f.prototype;
prototype.someMember = someValue;
如果您没有:

1)

2)

var prototype = instance.__proto__;
prototype.someMember = someValue;
var prototype = instance.constructor.prototype; // works only if constructor is properly assigned and not modified
prototype.someMember = someValue;
3)

var prototype = instance.__proto__;
prototype.someMember = someValue;
var prototype = instance.constructor.prototype; // works only if constructor is properly assigned and not modified
prototype.someMember = someValue;
为了兼容性,您可以在代码中插入以下代码段(并始终使用
Object.getPrototypeOf(instance)
返回原型):

更新:

根据ECMA-262第6版(2015年6月)
\uuuuu proto\uuuu
属性被标准化为Web浏览器的附加功能。所有最新版本的顶级浏览器现在都支持它。阅读更多关于
\uuuuuuuuuuuuuuuuuuuuuuuuuuu

  • MDN:

  • EDMA-262第6版(2015年6月):

看起来

Object.getPrototypeOf(passedObject);
将适用于此,并与现代浏览器兼容


下面是带有一条注释的

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
不可能在所有浏览器中都起作用。不仅
\uuuuu。但兼容性代码是基于所有这些方法的。此外,对于五种主要浏览器(即FF、Chrome、Safari、Opera),所有最新版本的浏览器都支持
Object.getPrototypeOf()
,并且兼容代码只需要用于IE8和更早版本的.object1.constructor.Prototype请注意,有时它不起作用。例如a=Function.prototype;a、 constructor.prototype将等于a。但很明显,a的原型是不同的。您可以通过检查a.。\uuuu proto\uuuu来确认a的原型是Object.prototype,这是检查原型的最佳方式。不建议使用仅代码的答案。请添加一些解释,说明这是如何解决问题的,或者这与现有答案有何不同。
var F = function();
F.prototype.member1 = 1;
F.prototype.getClass = F;

var object1 = new F();
object1.member1 = 2;

console.log(object1.getClass.prototype.member1); // prints 1
console.log(object1.member1); // prints 2
Object.getPrototypeOf(passedObject);
var F = function();
F.prototype.member1 = 1;
var intance = new F();
console.log(instance['member1']);