JSON으로 정의 된 기존 객체의 배열이 있습니다. 개체는 분명히 Object 유형입니다. 특정 기능을 제공하기 위해 사용자 정의 오브젝트 유형과 연관시키는 방법은 무엇입니까?JavaScript에서 객체 유형 변경
답변
모든 브라우저에서 작동합니다 방법은 당신이 원하는 속성과 방법과 배열의 각 항목을 확대 또는 생성자에 개체를 전달하고 기존 객체의 기반으로 새 개체를 만드는 중입니다 속성 및 메서드. 당신이 IE에 대해 걱정하지 않는 경우
또는 :
var obj = {
name : "Jeremy"
};
function CustomType() {
this.name = this.name || "someValue";
this.greeting = "Hi";
}
CustomType.prototype.sayHi = function() {
alert(this.greeting + ", " + this.name);
};
obj.__proto__ = CustomType.prototype;
obj.constructor.call(obj);
obj.sayHi();
저는 IE에 대해 신경 쓰지 만, 제안 된 바에 따라 전달 된 객체를 수정하고 호출자에게 다시 반환하는 메소드를 작성했습니다. 필자는 Perl에서 "축복"을 사용하고 내 호기심에 따라 객체를 수정할 수있는 데 너무 익숙합니다. – Ray
개체를 만든 후에는 개체의 형식을 변경할 수있는 방법이 없다고 생각합니다. 다행히도 클래스의 객체를 실제로 변경할 필요는 없을 것입니다. 객체에 몇 가지 새로운 메소드와 다른 기능을 제공하는 것에 만족할 것입니다. (유일한 차이점은 클래스를 변경 한 경우 발생할 수있는 일이며 코드가 실행되는 동안 대부분의 사람들은 클래스를 변경하지 않는다는 의미입니다.)
예를 들어 설명해 드리겠습니다.
function Speaker() {
this.speak = function() {
window.alert("Hello, " + this.name);
}
}
이 :
var myobj = new Object()
myobj.name = "Fred"
그럼 난 당신이 myobj
에 할당 할 수 있도록하고 싶습니다 몇 가지 클래스를 생성합니다 : 첫째, 당신이 가지고있는 JSON 객체를 표현하는 간단한 객체를 만듭니다 새로운 Speaker
클래스는 몇 가지 유용한 기능이 있습니다 :
var s = new Speaker()
s.name = "Sally"
s.speak()
이 그 m를 준 실행 : 그것은 출력 유용한 정보에 방법을 speak()
사용할 수 있습니다 e 메시지 "여보세요, 샐리". 불행히도이 기능을 가진 NEW 객체 (예 : s
)를 원하지 않는다면 기존 객체 (myobj
)가 갖고 싶어합니다. 다음은 당신이 어떻게 :이 실행 이제
myobj.speak = s.speak
:
myobj.speak()
라는 메시지가 "안녕하세요, 프레드"를 참조하십시오.
요약하려면 다음을 입력하십시오. 원하는 것을 수행하는 오브젝트를 작성하십시오. 모든 메소드 (및 임의의 도우미 변수)를 새 오브젝트로 복사하십시오. 비정상적인 상속 사용을 제외하고는 새로운 객체가 원하는대로 동작합니다.
특정 메소드를 사용하려면 apply/call을 사용할 수 있습니다.
또는 사용자 지정 개체의 메서드를 복사 할 수 있습니다.
function Object1() {
this.aValue = "10";
}
function CustomObject() {
this.customValue = "6";
}
function convertToCustom(obj) {
var custom = new CustomObject();
for(var key in obj) {
custom[key] = obj[key];
}
return custom;
}
var obj = new Object1();
var custom = convertToCustom(obj);
console.log(custom.customValue); // <- 6
console.log(custom.aValue); // <- 10
를 제레미의 대답을 보완, 당신은 직접 프로토을 가지고 노는 대신 Object.create를 사용할 수 있습니다. 또한 "확장"기능이 필요합니다.
그래서, 제레미의 예를 주어, 당신은 다음과 같이 할 수 : 당신이 생성자가 필요하지 않은 경우
var obj = {
name : "Jeremy"
};
function CustomType() {
}
CustomType.prototype.init = function(){
this.name = this.name || "someValue";
this.greeting = "Hi";
return this; //let's make it fluent
}
CustomType.prototype.sayHi = function() {
console.log(this.greeting + ", " + this.name);
};
function extend(obj, props) {
for(prop in props) {
if(props.hasOwnProperty(prop)) {
obj[prop] = props[prop];
}
}
return obj; //let's make it fluent
}
obj = extend(Object.create(CustomType.prototype), obj).init();
obj.sayHi();
, 당신이 할 수있는이 같은 :
Object.assign(new CustomType, {});
- 1. JavaScript에서 객체 삭제
- 2. javascript에서 ActiveX 객체 오류
- 3. Javascript에서 자바 세션 객체 새로 고침
- 4. 동적 대 객체 유형
- 5. 다중 객체 배열 유형?
- 6. 객체 유형 질문
- 7. 장고 템플릿 객체 유형
- 8. 다른 유형 객체
- 9. JavaScript에서 속성 값의 일부만 변경
- 10. 런타임시 클래스 유형 변경
- 11. Runtime의 변수 유형 변경
- 12. 조건부에서 오브젝트 유형 변경
- 13. 프로젝트 유형 변경
- 14. 동적 객체 초기화 JavaScript에서 (PHP Reflection에서 허용)?
- 15. JavaScript에서 객체 리터럴 지정 후에 세미콜론이 필요합니까?
- 16. Javascript에서 ASPX 페이지에 JSON 객체 전달
- 17. Javascript에서 비디오와 함께 Image() 객체 사용?
- 18. Javascript에서 JSON 객체 "undefined"오류가 발생했습니다.
- 19. 런타임시 객체 유형 호환성 확인
- 20. Java의 암시 적 객체 유형?
- 21. 반사 - 설정 반환되는 객체 유형?
- 22. 접근 클래스 객체 유형 C++
- 23. 유형 변수의 자바 클래스 객체
- 24. PropertyGrid 및 동적 객체 유형
- 25. 있는 UIWebView 스크롤 객체 유형
- 26. 스칼라 : 변경 가능 객체 변경 - OutOfMemoryError
- 27. javascript에서 동적으로 사용자 측에서 날짜 형식을 변경
- 28. Javascript에서 행 색상을 원래 색상으로 변경
- 29. JavaScript에서 버튼 클릭시 동적으로 속성 이름 변경
- 30. 양식에서 기본값의 데이터 유형 변경?
그 객체가 추가 속성이있는 경우/방법, 당신은 무엇을 더 필요로합니까? 몇 가지 예를 들어 주시겠습니까? – mykhal
.. 내 말은, 당신은 이미 정의 된 그러한 커스텀 객체 유형을 가지고 있는가? 아니면 그것을 수행하는 방법을 알고 싶습니까? – mykhal