js对象---call、apply和bind方法的一点感想

2019-12-25  本文已影响0人  Karvin

call方法

  1. 语法call([thisObj[,arg1[, arg2[, [,.argN]]]]])
  2. call方法将this的对象由初始的上下文改变为thisObj指定的新对象。
    thisObj的取值有4种情况:
    (1)不传参,或者传nullundefined,此时this指向window对象
    (2)传递函数名时,this指向这个函数的引用
    (3)传递字符串、数值或布尔值等基础类型,this指向其对应的包装对象
    (4)传递对象,this指向这个对象

用几个例子来看一下call方法的几个应用

第一个例子

function class1(){   
  this.name=function(){   
    console.log("我是class1内的方法");   
  }   
}   
function class2(){ 
  class1.call(this);  //call将this的对象改变指向了class1
}   

var f=new class2();   
f.name();  //创建了一个新的class2,这个新的class2使用的是class1的方法

第二个例子

function Class1() { 
    this.name = "class1";
    this.showNam = function() { 
        alert(this.name); 
    } 
} 
function Class2() { 
    this.name = "class2"; 
} 
var c1 = new Class1(); 
var c2 = new Class2(); 

c1.showNam.call(c2); //可以看出c2中并没有showNam这个方法,.call将c1的方法拿到了c2来执行

第三个例子

function Animal(name){   
  this.name=name;   
  this.showName=function(){   
    console.log(this.name);   
  }   
}   
function Dog(name){   
  Animal.call(this,name);   
}   
var dog=new Dog("Crazy dog");   
dog.showName();

输出:Crazy dog
//Animal.call(this,name)的意思是用Animal代替this对象,等于Dog继承了Animal对象的属性和方法

总结

fn1.call.call.call.call(fn2)也就相当于不停的把.call前面的对象替换后面的参数,相当于fn1.call(fn2)

apply方法

apply方法和call的用法作用几乎完全一样,只有一个区别:
给函数传参的写法不同

bind方法

上一篇 下一篇

猜你喜欢

热点阅读