programing

JavaScript Object Literal에 프로토 타입 추가

javaba 2021. 1. 14. 23:04
반응형

JavaScript Object Literal에 프로토 타입 추가


STORE = {
   item : function() {
  }
};
STORE.item.prototype.add = function() { alert('test 123'); };
STORE.item.add();

나는 이것의 문제점을 꽤 오랫동안 파악하려고 노력해 왔습니다. 왜 작동하지 않습니까? 그러나 다음을 사용할 때 작동합니다.

STORE.item.prototype.add();

프로토 타입 객체는 생성자 함수 , 기본적으로 새 객체 인스턴스를 생성하기 위해 new 연산자사용하여 호출되는 함수에 사용됩니다 .

JavaScript의 함수는 일류 객체입니다. 즉, 멤버를 추가하고 일반 객체처럼 처리 할 수 ​​있습니다.

var STORE = {
   item : function() {
  }
};

STORE.item.add = function() { alert('test 123'); };
STORE.item.add();

앞서 말했듯이 프로토 타입 객체의 일반적인 용도는 다음과 같이 new 연산자로 생성자 함수를 호출하여 객체를 인스턴스화 할 때입니다.

function SomeObject() {} // a constructor function
SomeObject.prototype.someMethod = function () {};

var obj = new SomeObject();

SomeObject의 모든 인스턴스 SomeObject.prototype는 프로토 타입 체인을 통해 액세스 할 수 있으므로 에서 멤버를 상속합니다 .

JavaScript의 모든 함수에는 생성자로 사용할 함수를 알 수있는 방법이 없기 때문에 프로토 타입 객체가 있습니다.


수년 후, JavaScript (ES2015가 도착했을 때) 마침내 Object.setPrototypeOf () 메서드가 생겼습니다.

const STORE = {
  item: function() {}
};


Object.setPrototypeOf(STORE.item, {
  add: function() {
    alert('test 123');
  }
})


STORE.item.add();


JSON 리바이 버를 사용하여 구문 분석시 JSON을 클래스 객체로 변환 할 수 있습니다. EcmaScript 5 초안은 http://JSON.org/js.html에 설명 된 JSON2 리바이 버 체계를 채택했습니다.

var myObject = JSON.parse(myJSONtext, reviver);

선택적 reviver 매개 변수는 최종 결과의 모든 수준에서 모든 키와 값에 대해 호출되는 함수입니다. 각 값은 reviver 함수의 결과로 대체됩니다. 이것은 일반 객체를 의사 클래스의 인스턴스로 재 형성하거나 날짜 문자열을 Date 객체로 변환하는 데 사용할 수 있습니다.

myData = JSON.parse(text, function (key, value) {
    var type;
    if (value && typeof value === 'object') {
        type = value.type;
        if (typeof type === 'string' && typeof window[type] === 'function') {
            return new (window[type])(value);
        }
    }
    return value;
});

이 글을 쓰는 시점에서 이것은 __proto__속성 을 사용하여 가능 합니다. 여기있는 누군가가 현재와 아마도 미래에 확인하고있을 경우를 대비해.

const dog = {
    name: 'canine',
    bark: function() {
        console.log('woof woof!')
    }
}

const pug = {}
pug.__proto__ = dog;

pug.bark();

그러나이 경우 프로토 타입을 추가하는 권장 방법은 Object.create를 사용하는 것 입니다. 따라서 위 코드는 다음과 같이 번역됩니다.

const pug = Object.create(dog)

pug.bark();

또는 답변 중 하나에서 언급했듯이 Object.setPrototypeOf 를 사용할 수도 있습니다 .

도움이되기를 바랍니다.


STORE = {
   item : function() {
  }
};

this command would create a STORE object. you could check by typeof STORE;. It should return 'object'. And if you type STORE.item; it returns 'function ..'.

Since it is an ordinary object, thus if you want to change item function, you could just access its properties/method with this command.

STORE.item = function() { alert('test 123'); };

Try STORE.item; it's still should return 'function ..'.

Try STORE.item(); then alert will be shown.

ReferenceURL : https://stackoverflow.com/questions/1592384/adding-prototype-to-javascript-object-literal

반응형