在使用apply调用函数期间阻止类型转换“this”

时间:2010-01-16 22:23:22

标签: javascript

Servus Ninjas,

这是ecmascript 5规范。 ({1}}部分中的(第118页)说:

  

注意:thisArg值未经修改即作为此值传递。这是对版本3的更改,其中未定义或null thisArg替换为全局对象, ToObject 应用于所有其他值,并将结果作为此值传递。

这听起来很有希望,但是这个规范还没有在任何现代浏览器中实现,所以我们必须处理第3个规范的实现。

我现在的问题是“如何让Function.prototype.apply(thisArg, argArray)语句变为TRUE?

typeof

任何想法?

3 个答案:

答案 0 :(得分:3)

JavaScript中有两种类型的字符串。

typeof string

"hello"

和typeof对象

new String("hello");

apply将始终包装您作为对象传递的任何值,因为您需要通过this关键字使用它。

答案 1 :(得分:0)

使用this instanceof String(仅限同一窗口)或使用Object.prototype.toString.call(this) === "[object String]"(适用于Windows)。

答案 2 :(得分:0)

目前唯一的事情是检查类型

使用Object.prototype.toString.call(string) == "[object 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");

这是关于javascript的悲伤章节:(