js中Number是干嘛的,这段代码里为什么Number(this) 会有n=4呢?Number.prototype.times = function(f,context){var n = Number(this); //这段代码里为什么Number(this) 会有n=4呢?这个地方不理解

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 06:20:26

js中Number是干嘛的,这段代码里为什么Number(this) 会有n=4呢?Number.prototype.times = function(f,context){var n = Number(this); //这段代码里为什么Number(this) 会有n=4呢?这个地方不理解
js中Number是干嘛的,这段代码里为什么Number(this) 会有n=4呢?
Number.prototype.times = function(f,context){

var n = Number(this); //这段代码里为什么Number(this) 会有n=4呢?这个地方不理解
for (var i = 0; i < n; i++) {
f.call(context,i)
//f.apply(context,[i,i]);
};
}
var n = 4;
n.times(function(n,l){ debugger; console.log(n + " hello " + l ); });

js中Number是干嘛的,这段代码里为什么Number(this) 会有n=4呢?Number.prototype.times = function(f,context){var n = Number(this); //这段代码里为什么Number(this) 会有n=4呢?这个地方不理解
下面有具体的注释:
Number.prototype.times = function(f,context){ //向Number类中添加一个times方法,这个方法可传入两个参数
\x09var n = Number(this); //这里的变量n与下面的n并不是一个变量,这个变量属性Number类下times方法中的局部变量.它只在这个方法中起作用.
\x09for (var i = 0; i < n; i++) {
\x09\x09f.call(context,i);
\x09\x09//f.apply(context,[i,i]);
\x09};
}
var n = 4; //在JS中,一个数字也是一个对象,它会有自己的方法,由于上面的代码为数字类添加了一个times方法,所以这个数字便拥有了times方法,可以直接调用
n.times(function(n,l){//这里,就调用 了刚刚为Number类增加的times方法,传入的值只有一个,这个值是一个匿名函数
\x09debugger; //在调试模式下,JS运行到这里会暂停,也就是一个断点
\x09console.log(n + " hello " + l ); //在控制台中输出文字
});




两个n并不是一个,它们完全不是同一个变量,可以说,它们之间没什么直接的关系,完全可以改名
比如:

var num = 158;
num.times(function(){});




其实,var n = Number(this); 这里面的this,就是指158这个数字对象.
然后将这个对象再Number(),就是将对象转换为数字.


————
这段代码里,涉及到了几个知识点,你需要了


JS 变量作用域;
JS类;
JS对象;
JS prototype;
JS 类继承(JS call())


而你当前所的疑惑的,就是变量作用域,如果你不太好理解,可以看下面的代码,与上面的代码是一样的,其中我只改了后面的变量名:
Number.prototype.times = function(f,context){ //向Number类中添加一个times方法,这个方法可传入两个参数
\x09var n = Number(this); //这里的变量n与下面的n并不是一个变量,这个变量属性Number类下times方法中的局部变量.它只在这个方法中起作用.
\x09for (var i = 0; i < n; i++) {
\x09\x09f.call(context,i);
\x09\x09//f.apply(context,[i,i]);
\x09};
}
var otherN = 4; //在JS中,一个数字也是一个对象,它会有自己的方法,由于上面的代码为数字类添加了一个times方法,所以这个数字便拥有了times方法,可以直接调用
otherN.times(function(otherN,l){//这里,就调用 了刚刚为Number类增加的times方法,传入的值只有一个,这个值是一个匿名函数
\x09debugger; //在调试模式下,JS运行到这里会暂停,也就是一个断点
\x09console.log(otherN + " hello " + l ); //在控制台中输出文字
});