>웹 프론트엔드 >JS 튜토리얼 >JavaScript 유형(증가 기능)_javascript 기술에 메소드 구현 코드 추가

JavaScript 유형(증가 기능)_javascript 기술에 메소드 구현 코드 추가

WBOY
WBOY원래의
2016-05-16 17:57:491133검색

JavaScript 유형 함수(예: Number/String/Boolean/Array/Date/Obejct 등)는 모두 Function.prototype에서 상속되므로 Function.prototype에 메서드를 추가하면 여기서 파생된 기본 유형 함수에도 영향을 줍니다. 예:

코드 복사 코드는 다음과 같습니다.

Function.prototype.addMethod= function(methodName, func){
if(!this[methodName]){
this[methodName]=func;//해당 유형의 정적 메소드와 유사한 메소드를 유형에 추가합니다. func 메소드는 인스턴스가 아닌 유형에 할당됩니다.
}
return this;//this는 메서드의 호출 개체(유형 함수)에 바인딩됩니다. 이것을 반환하면 체인 호출이 가능합니다.
}
Array.addMethod('testFun',function ( ){alert(this)});
//Array.testFun(); //function Array() {[네이티브 코드]}
Object.addMethod('testFun',function(){alert( this )});
//Object.testFun(); //function Object() {[네이티브 코드]}
Boolean.addMethod('testFun',function(){alert(this)});
//Boolean.testFun(); //function Boolean() {[네이티브 코드]}
function CustomObject(name,value){
this.name=name || > this.value=value || 0;
this.toString=function(){return '[name:' this.name ',value:' this.value ']'}
}
CustomObject . addMethod('testFun',function(){alert(this)});
/* return:
* function CustomObject(name, value) {
this.name = name || ;
this.value = value || 0;
this.toString = function () {return "[name:" this.name ",value:" this.value "]";}; }
*/
CustomObject.testFun();


이때 인스턴스로 호출하면 오류가 발생합니다. 예:


var customObject=new CustomObject( ); // CustomObject 인스턴스 정의
customObject.testFun();//오류: temp.testFun은 함수가 아닙니다.


인스턴스에 메서드 추가
유형 인스턴스에 메소드를 추가해야 합니다. 유형의 프로토타입에 바인딩됩니다. 예를 들어


Function.prototype.addMethod= function(methodName,func ){
if(!this.prototype[methodName]){
this.prototype[methodName]=func;//프로토타입에 메소드를 추가합니다. 이 메소드는 이 유형의 인스턴스에 영향을 미칩니다.
}
return this.prototype;//프로토타입을 반환합니다. 이 유형의 인스턴스는 체인에서 호출될 수 있습니다
}
Object.addMethod('testFun',function(){alert(this )})/ /({toString:function(){return '[빈 객체]'}}).testFun(); //[빈 객체]
Number.addMethod('testFun',function (){alert(this)} );
//(5).testFun(); //5
String.addMethod('testFun',function(){alert(this)}); >//'test'.testFun (); //'테스트'
Boolean.addMethod('testFun',function(){alert(this)})
//true.testFun(); /true
Array.addMethod ('testFun',function(){alert(this)})
//(['a','b']).testFun() //a,b
Date.addMethod(' testFun',function(){alert(this)});
//new Date().testFun() //Tue Dec 27 2011 11:20:58 GMT-0800 (태평양 표준시)
function CustomObject(name,value){
this.name=name || 'CustomObject'
this.value=value || 0; (){return '[name: ' this.name ',value:' this.value ']'}
}
CustomObject.addMethod('testFun',function(){alert(this)});
var customObject=new CustomObject ();
customObject.testFun(); //[name:CustomObject,value:0]


이때 type으로 testFun을 호출하면 오류가 보고됩니다. 예를 들어



코드 복사
코드는 다음과 같습니다. Array.addMethod('testFun ',function() {alert(this)}); //Array.testFun(); //오류: Array.testFun은 함수가 아닙니다. CustomObject.addMethod('testFun',function(){ Alert(this)} );
CustomObject.testFun(); //오류: CustomObject.testFun은 함수가 아닙니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.