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
'programing' 카테고리의 다른 글
사용자 정의 개체의 addEventListener (0) | 2021.01.14 |
---|---|
사용자 정의 개체의 자바 스크립트 유형 (0) | 2021.01.14 |
Eclipse 3.5에서 편집기 탭 너비 변경 (0) | 2021.01.14 |
유니 코드 속성과 일치하는 Python 정규식 (0) | 2021.01.14 |
WPF 4.0에서 SnapsToDevicePixels를 언제 사용해야합니까? (0) | 2021.01.14 |