Program Tip

자바 스크립트에서 객체 프로토 타입에 액세스하는 방법은 무엇입니까?

programtip 2020. 12. 15. 19:44
반응형

자바 스크립트에서 객체 프로토 타입에 액세스하는 방법은 무엇입니까?


모든 기사에서 JavaScript는 프로토 타입 기반 언어이며, 이는 모든 객체에 프로토 타입 (또는 더 정확하게는 프로토 타입 체인)이 있음을 의미합니다.

지금까지 다음 코드 스 니펫을 시도했습니다.

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

의 프로토 타입 객체에 액세스하려면 어떻게 object1해야합니까? 그렇게 할 수있는 브라우저 중립적 인 방법 __proto__ 있습니까 (재산에 의존하지 않습니까? 링크를 보았지만 2010 년 이후로 새로운 개발이있을 수 있습니다) 내가 할 수 없다면 후드 뒤에있는 근거를 공유해 주시겠습니까?


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

instance function 클래스의 이름을 알고 있다면 다음 과 같이 프로토 타입에 액세스 할 수 있습니다.

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 6th Edition (2015 년 6 월)에 따르면 __proto__속성은 웹 브라우저의 추가 기능으로 표준화되었습니다. 이제 모든 최신 버전의 상위 브라우저에서 지원합니다. 자세히 알아보기 __proto__:


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

마치

Object.getPrototypeOf(passedObject);

이를 위해 작동하며 최신 브라우저와 호환됩니다.

다음은 MDN호환성 표입니다.


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

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

참조 URL : https://stackoverflow.com/questions/7662147/how-to-access-object-prototype-in-javascript

반응형