以前了解过一些对象问题,了解对象前看了看this的用法,很有意思,也很基础,下面就是我总结的一些this方法
先来看看this 的一些小练习:
var name="king";
var a={
name:"Jhon",
age:26,
get:function () {
var name="ping";
alert(this.name)
}
}
a.get() //结果1
var b=a.get;
b(); //结果2
上面的结果一应该是 Jhon, 这个应该不用说,下面结果2 是king,为什么是king呢,原因是 a.get赋给b了,然而b所在的环境是全局环境 window, 当执行b时,this指向的是window, 那么this.name 就会寻找 window下的name
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
那么我们有没有办法 将b 中this.nam指向a对象呢?
这个时候我们就要用的 call 和apply这两个方法了
var name="king";
var a={
name:"Jhon",
age:26,
get:function () {
var name="ping";
alert(this.name)
}
}
var b=a.get;
b.call(a) //结果 Jhon
1.call方法:
语法:this.call(thisObj,Object)
this:原this对象
thisObj:this指向的新对象
object:指定的参数列表,多个用逗号分隔
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的 新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
例如:
<div id="one">字体</div>
<script>
function fun(b,c) {
this.style[b]=c;
}
var one=document.getElementById('one');
fun.call(one,"fontSize","30px");
</script>
2.apply方法:
语法:this.apply([thisObj[,argArray]])
定义:this:原this对象
thisObj:this指向的新对象
argArray:指定的参数以数组形式【】展示
。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
<div id="one">字体</div>
<script>
function fun(b,c) {
this.style[b]=c;
}
var one=document.getElementById('one');
fun.apply(one,["fontSize","30px"]);
</script>
下面是this的一个练习!可以看一下
var a = {
name:"zhang",
sayName:function(){
console.log("this.name="+this.name);
}
};
var name = "ling";
function sayName(){
var name = "wang";
var c={
name:"jhon",
age:"25"
}
var sss = a.sayName;
sss(); //this.name =1?
a.sayName(); //this.name =2?
(a.sayName)(); //this.name =3?
(b = a.sayName)(); //this.name=4?
b.call(c) //this.name=5?
}
sayName();
上面练习的结果是: 1.ling 2. zhang 3. zhang 4.ling 5.jhon