潘少在那随便扯的

ECMAScript规范为所有函数都包含两个方法(这两个方法非继承而来), call 和 apply 。这两个函数都是在特定的作用域中调用函数,能改变函数的作用域,实际上是改变函数体内 this 的值 。


语法

call(thisObj,Object) 

定义 

调用一个对象的一个方法,以另一个对象替换当前对象

说明

call方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文从初始的上下文变为由thisObj指定的新对象,如果没有提供thisObj参数,那么Golbal对象被用作thisObj


用法 调用函数,传递参数

function add(x,y) {

return x+y

}


//用call来调用add方法

function myAddCall (x,y) {

//调用add方法的call方法

return add.call(this,x,y);

}

console.log(myAddCall(10,20))   //输出30



 改变函数作用域 var name='小白'
var obj = {name:'小红'};
function sayName() {
  return this.name
}

console.log(sayName.call(this))//小白
console.log(sayName.call(obj));//小红



 //父类 Person
    function Person() {
        this.sayName = function() {
            return this.name;
        }
    }

    //子类 Chinese
    function Chinese(name) {
        //借助 call 实现继承
        Person.call(this);
        this.name = name;

        this.ch = function() {
            alert('我是中国人');
        }
    }

    //子类 America
    function America(name) {
        //借助 call 实现继承
        Person.call(this);
        this.name = name;

        this.am = function() {
            alert('我是美国人');
        }
    }


    //测试
    var chinese = new Chinese('成龙');
    //调用 父类方法
    console.log(chinese.sayName());   //输出 成龙

    var america = new America('America');
    //调用 父类方法
    console.log(america.sayName());   //输出 America


相关内容

发表评论

验证码:
点击我更换图片

最新评论