Javascript应用或调用charCodeAt使用

时间:2011-08-19 14:34:28

标签: javascript browser scope call this

前提:正确的charCodeAt(i:Int)性能如何:

"test".charCodeAt(0)
116
"test".charCodeAt(1)
101
"test".charCodeAt(2)
115
"test".charCodeAt(3)
116
"test".charCodeAt(4)
NaN

以及使用call或apply时会发生什么:

>"test".charCodeAt.apply(this, [0,1,2,3])
91
//that's fine, except for 91!
"test".charCodeAt.call(this,0)
91
"test".charCodeAt.call(this,4)
101
"test".charCodeAt.call(this,5)
99
"test".charCodeAt.call(this,50)
NaN
"test".charCodeAt.call(this,6)
116
"test".charCodeAt.call(this,8)
68

x = "test".charCodeAt
function charCodeAt() { [native code] }
x.call(x,0)
102

正确传递参数。它是通过call或apply的第一个参数传递的范围,并从 this 指针更改valueOf。

我不确定发生了什么,并且无法在新的控制台窗口(Chrome v15)中重现该行为:

x = "test"
"test"

"".charCodeAt.call(this.x,0)
116
OK.

关于问题:当未使用 this.x 指定范围但仅 x - 在此示例中,可以奇怪的行为

2 个答案:

答案 0 :(得分:6)

在所有这些电话中:

"test".charCodeAt.call(this, 0);

this的值可能是window,而不是任何字符串值。试试这个:

var string = "test";
string.charCodeAt.call(string, 0);

如果你传递this的虚假内容,你不能指望它能正常工作:-)当你定义一个变量“x”然后引用“this.x”时它起作用的原因是同样,thiswindow,因此“this.x”与“window.x”相同,它将为您提供变量。

答案 1 :(得分:1)

在您的案例中,{p> thiswindowwindow.toString() === "[object Window]"。 所以你正在使用该字符串。

如果您希望charCodeAt函数更好地使用var foo = String.prototype.charCodeAt;,然后在某个字符串上调用它:foo.call('meow', 0)