자바 스크립트에서는, 호출 적용한 세 가지 방법을 운반하는 기능 오브젝트를 바인딩,이 방법은 세 가지 주요 역할이 점의 기능을 변경하는 것이다.
apply
, call
, bind
3 점은이 객체의 기능을 변경하는 데 사용된다 apply
, call
, bind
세 번째의 인수가이 객체, 즉 당신이 컨텍스트를 지정하려면,이다 가리하는 것입니다 (각 통화 기능은 특별한 값을 가지고 - 상기 호 컨텍스트 (문맥) - 이는 인 this
키);의 값은 apply
, call
, bind
세 파라미터들이 후속 매개 변수 전달을 사용할 수 있으며 bind
, 해당 기능을 리턴 호출 나중에 용이하게하기 위해, apply
, call
그 호출은 즉시 인
요구();
구문 :call([thisObj[,arg1[, arg2[, [,.argN]]]]])
정의 : 객체에 대한 메서드 호출, 또 다른 목적은 현재의 객체를 대체하는
설명 : 호출 방법은 메소드를 호출 다른 개체의 대신 사용할 수 있습니다
상기 방법은 초기 thisObj 컨텍스트 변화로부터 새로운 객체가 지정된 오브젝트 컨텍스트의 함수를 호출 할 수있다
thisObj
4 개의 케이스 값은 다음 :
(1) 통과 불확정 널 통과하지이 윈도우 오브젝트의 기능을 의미한다
(2) 다른 함수 이름의 전송 기능이 기능 기준점의 기능
(3 ) 통과 문자열 기본 유형의 숫자 또는 부울 타입, 대응하는 오브젝트이 점의 함수와 같은 문자열, 숫자, 부울로서 패키지화 될
. (4) 오브젝트를 전달이 물체 점의 함수
function a(){
console.log(this); //输出函数a中的this对象 } function b(){} var c={name:"call"}; //定义对象c a.call(); //window a.call(null); //window a.call(undefined); //window a.call(1); //Number a.call(''); //String a.call(true); //Boolean a.call(b); //function b(){} a.call(c); //Object
function class1(){
this.name=function(){ console.log("我是class1内的方法"); } } function class2(){ class1.call(this); //此行代码执行后,当前的this指向了class1(也可以说class2继承了class1) } var f=new class2(); f.name(); //调用的是class1内的方法,将class1的name方法交给class2使用
例子:
function eat(x,y){
console.log(x+y); } function drink(x,y){ console.log(x-y); } eat.call(drink,3,2) //5
function Animal(){
this.name="animal"; this.showName=function(){ console.log(this.name); } } function Dog(){ this.name="dog"; } var animal=new Animal(); var dog=new Dog(); animal.showName.call(dog); 输出:dog