数码资讯
javascript这个关键字详细的解决方案
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
1。这指向构造函数实例化的对象。
在最后一篇文章中,我们提到了使用新构造函数和调用构造函数而不使用新的区别,如下所示:
复制代码代码如下所示:
函数本杰明(用户名,性别){
this.username =用户名;
this.sex =性;
}
Var Benjamin =新本杰明(zuojj
输出:本杰明{性别:男性
console.log(本杰明);
Var Ben =本杰明(zhangsan
输出:未定义
console.log(本);
当构造函数被调用为普通函数时,它不会返回一个值,而这指向全局对象,那么我们如何避免由于新关键字的缺乏而导致的问题呢
复制代码代码如下所示:
函数本杰明(用户名,性别){
检查是否为本杰明对象
如果(这是本杰明){
this.username =用户名;
this.sex =性;
{ }人
返回新本杰明(用户名,性别);
}
}
Var Benjamin =新本杰明(zuojj
输出:本杰明{性别:男性
console.log(本杰明);
Var Ben =本杰明(zhangsan
/ /输出:本杰明{用户名:zhangsan
console.log(本);
在这种情况下,我们首先检查是否这是哥杰明,例如果不使用新的自动调用构造函数,并实例化,这意味着我们不再需要担心错过新的关键字实例化构造函数。当然,我们可能会养成一个坏习惯,如果它是可以避免的。我们可以抛出一个错误,如下:
复制代码代码如下所示:
函数本杰明(用户名,性别){
检查是否为本杰明对象
如果(这是本杰明){
this.username =用户名;
this.sex =性;
{ }人
如果没有,抛出错误。
抛出新的错误('本杰明'调用没有'新' ');
}
}
二,这指向调用函数的对象。
请看下面的例子:
复制代码代码如下所示:
变量x=10;
var obj = { {
X:10,
输出:函数(){
输出:真的
console.log(= obj);
返回这个;
},
Innerobj:{
X:30,
输出:函数(){
输出:真的
console.log(= obj。innerobj);
返回这个;
}
}
};
输出:10
console.log(obj.output());
输出:30
console.log(obj.innerobj.output());
三,这指向全局对象。
当我们讨论构造函数时,我们还讨论了当这个不适合新的时候,它指向全局对象。现在让我们来看一下容易犯错误的两个常见例子。
复制代码代码如下所示:
变量x=100;
var obj = { {
X:10,
输出:函数(){
(函数(){())
输出:真的
console.log(=窗口);
输出:内部:100
console.log(内在:+,X);
});
返回这个;
}
};
输出:10
console.log(obj.output());
使用闭包时,作用域会改变,这指向窗口(在浏览器中)。
复制代码代码如下所示:
变量x=100;
var obj = { {
X:10,
输出:函数(){
返回这个;
}
};
无功输出= obj.output;
输出:10
console.log(obj.output());
输出:100
console.log(输出());
var obj2 = { {
X:30,
输出:obj.output
}
输出:30
console.log(obj2.output());
在这一点上,当函数调用被调用时,总是指向对象。
四,这指向应用调用()方法分配的对象。
复制代码代码如下所示:
变量x=100;
var obj = { {
X:10,
输出:函数(){
返回这个;
}
};
输出:10
console.log(obj.output());
var obj2 = { {
X:40,
输出:obj.output
}
输出:40
console.log(obj.output.call(obj2));
输出:10
console.log(obj2.output.apply(obj));
五,回调函数中的这个值指向调用回调函数的这个对象所指向的对象。
复制代码代码如下所示:
$(#用户名),(单击
console.log(的价值);
});
六,这在Function.prototype.bind
绑定()方法创建一个新函数,当调用、调用时,它也被称为正确和错误。
例1:
复制代码代码如下所示:
功能人(){
返回this.name;
}
/ / function.prototype.bind
每person.bind({ var =
名称:zuojj
});
console.log(每);
var obj = { {
姓名:本
人:人,
单位:元
};
/ /输出:本,zuojj
console.log(obj.person(),obj.per());
例二:
复制代码代码如下所示:
这个,x=9;
var模块{ {
X:81,
GetX:函数(){退货。X;}
};
输出:81
console.log(module.getx());
VaR模拟X = module.getx;
输出:9,因为在这种情况下,指的是全局对象。
console.log(getX);
创建一个新的功能with'this ' /绑定模块
无功boundgetx = getx.bind(模块);
输出:81
console.log(boundgetx());
在最后一篇文章中,我们提到了使用新构造函数和调用构造函数而不使用新的区别,如下所示:
复制代码代码如下所示:
函数本杰明(用户名,性别){
this.username =用户名;
this.sex =性;
}
Var Benjamin =新本杰明(zuojj
输出:本杰明{性别:男性
console.log(本杰明);
Var Ben =本杰明(zhangsan
输出:未定义
console.log(本);
当构造函数被调用为普通函数时,它不会返回一个值,而这指向全局对象,那么我们如何避免由于新关键字的缺乏而导致的问题呢
复制代码代码如下所示:
函数本杰明(用户名,性别){
检查是否为本杰明对象
如果(这是本杰明){
this.username =用户名;
this.sex =性;
{ }人
返回新本杰明(用户名,性别);
}
}
Var Benjamin =新本杰明(zuojj
输出:本杰明{性别:男性
console.log(本杰明);
Var Ben =本杰明(zhangsan
/ /输出:本杰明{用户名:zhangsan
console.log(本);
在这种情况下,我们首先检查是否这是哥杰明,例如果不使用新的自动调用构造函数,并实例化,这意味着我们不再需要担心错过新的关键字实例化构造函数。当然,我们可能会养成一个坏习惯,如果它是可以避免的。我们可以抛出一个错误,如下:
复制代码代码如下所示:
函数本杰明(用户名,性别){
检查是否为本杰明对象
如果(这是本杰明){
this.username =用户名;
this.sex =性;
{ }人
如果没有,抛出错误。
抛出新的错误('本杰明'调用没有'新' ');
}
}
二,这指向调用函数的对象。
请看下面的例子:
复制代码代码如下所示:
变量x=10;
var obj = { {
X:10,
输出:函数(){
输出:真的
console.log(= obj);
返回这个;
},
Innerobj:{
X:30,
输出:函数(){
输出:真的
console.log(= obj。innerobj);
返回这个;
}
}
};
输出:10
console.log(obj.output());
输出:30
console.log(obj.innerobj.output());
三,这指向全局对象。
当我们讨论构造函数时,我们还讨论了当这个不适合新的时候,它指向全局对象。现在让我们来看一下容易犯错误的两个常见例子。
复制代码代码如下所示:
变量x=100;
var obj = { {
X:10,
输出:函数(){
(函数(){())
输出:真的
console.log(=窗口);
输出:内部:100
console.log(内在:+,X);
});
返回这个;
}
};
输出:10
console.log(obj.output());
使用闭包时,作用域会改变,这指向窗口(在浏览器中)。
复制代码代码如下所示:
变量x=100;
var obj = { {
X:10,
输出:函数(){
返回这个;
}
};
无功输出= obj.output;
输出:10
console.log(obj.output());
输出:100
console.log(输出());
var obj2 = { {
X:30,
输出:obj.output
}
输出:30
console.log(obj2.output());
在这一点上,当函数调用被调用时,总是指向对象。
四,这指向应用调用()方法分配的对象。
复制代码代码如下所示:
变量x=100;
var obj = { {
X:10,
输出:函数(){
返回这个;
}
};
输出:10
console.log(obj.output());
var obj2 = { {
X:40,
输出:obj.output
}
输出:40
console.log(obj.output.call(obj2));
输出:10
console.log(obj2.output.apply(obj));
五,回调函数中的这个值指向调用回调函数的这个对象所指向的对象。
复制代码代码如下所示:
$(#用户名),(单击
console.log(的价值);
});
六,这在Function.prototype.bind
绑定()方法创建一个新函数,当调用、调用时,它也被称为正确和错误。
例1:
复制代码代码如下所示:
功能人(){
返回this.name;
}
/ / function.prototype.bind
每person.bind({ var =
名称:zuojj
});
console.log(每);
var obj = { {
姓名:本
人:人,
单位:元
};
/ /输出:本,zuojj
console.log(obj.person(),obj.per());
例二:
复制代码代码如下所示:
这个,x=9;
var模块{ {
X:81,
GetX:函数(){退货。X;}
};
输出:81
console.log(module.getx());
VaR模拟X = module.getx;
输出:9,因为在这种情况下,指的是全局对象。
console.log(getX);
创建一个新的功能with'this ' /绑定模块
无功boundgetx = getx.bind(模块);
输出:81
console.log(boundgetx());
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。