How to access object prototype in javascript?

China☆狼群 提交于 2019-11-26 10:18:10

问题


In all the articles it is written that JavaScript is a prototype-based language, meaning that every object has a prototype (or, more precisely, prototype chain).

So far, I\'ve tried the following code snippet:

var F = function();
F.prototype.member1 = 1;
var object1 = new F();
console.log(object1.member1); // prints 1

How can I access the prototype object of object1? Is there a browser-neutral way to do that (I mean, not relying on __proto__ property? Seen this link, but maybe there are new developments since 2010) If I can\'t, could you share please the rationale behind the hood?


回答1:


var f = function();
var instance = new f();

If you know name of instance class function, you can simply access prototype as:

var prototype = f.prototype;
prototype.someMember = someValue;

If you don't:

1)

var prototype = Object.getPrototypeOf(instance);
prototype.someMember = someValue;

2) or

var prototype = instance.__proto__;
prototype.someMember = someValue;

3) or

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

For compatibility you can place into your code the following snippet (and use always Object.getPrototypeOf(instance) to return prototype):

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;

    };

  }
}

UPDATE:

According to ECMA-262 6th Edition (June 2015) __proto__ property is standardized as additional feature for Web browsers. All latest editions of top browsers supports it now. Read more about __proto__:

  • MDN: Object.prototype.__proto__

  • EDMA-262 6th Edition (June 2015): B.2.2.1 Object.prototype.__proto__




回答2:


It looks like

Object.getPrototypeOf(passedObject);

will work for this, and is compatible with modern browsers.

Here are the compatibility tables on MDN




回答3:


var F = function(){};
var object1 = new F();
alert(object1.constructor === F);
alert(object1.constructor.prototype === F.prototype);



回答4:


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



回答5:


var F = function();
F.prototype.member1 = 1;
var intance = new F();
console.log(instance['member1']);


来源:https://stackoverflow.com/questions/7662147/how-to-access-object-prototype-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!