2010-01-16 8 views
0

Servus 도사 적용하여 함수」가 "통화 중의 변환 형태에서이 5 스펙 ECMAScript를하는 것이다. (118 페이지) 섹션의 말한다 :방지</p> <p>,

참고 : thisArg 값은이 값으로 수정하지 않고 전달됩니다. This Edition은 정의되지 않은 또는 this thisArg가 전역 개체로 대체되고 ToObject이 다른 모든 값에 적용되고이 결과가이 값으로 전달되는 버전 3의 변경 사항입니다.

현대적인 브라우저에서는이 스펙이 아직 구현되지 않았으므로 3 차 스펙 구현을 처리해야합니다.

지금 내 질문에 "typeof 진술을 얻는 방법? "

var foo = function (arg1, arg2) { 
     alert(typeof this == "string"); 
}; 

foo.apply("bar", ["arg1", "arg2"]); 

아이디어가 있으십니까?

답변

0

this instanceof String (동일한 창 전용)을 사용하거나 Object.prototype.toString.call(this) === "[object String]" (여러 창을 통해 작동)을 사용하십시오.

3

자바 스크립트에는 두 가지 유형의 문자열이 있습니다.

대해서 typeof 문자열

"hello" 

을 가진 사람 및 대해서 typeof 객체와 사람

new String("hello"); 

apply 당신이 this 키워드를 통해 사용할 필요가 있기 때문에 항상 객체로 전달할 값을 바꿈됩니다 .

0
순간에 하나 밖에없는 것 같은 Object.prototype.toString.call(string) == "[object String]";와 유형을

을 확인하고 String으로 this를 다시 변환하는 것입니다

:

var isString = function(string) { 
     return Object.prototype.toString.call(string) == "[object String]"; 
    }; 

    var isNumber = function(number) { 
     return Object.prototype.toString.call(number) == "[object Number]"; 
    }; 

    var toRightType = function(mess) { 
     if(isString(mess)) { 
     mess = mess+""; 
     } 

     if(isNumber(mess)) { 
     mess = mess+0; 
     } 

     return mess; 
    }; 


    var foo = function() { 
     var _this = toRightType(this); 
    }; 

    foo.apply("bar"); 

이 자바 스크립트에서 슬픈 장에 :(