javascript - js中call的使用问题

查看:98
本文介绍了javascript - js中call的使用问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function Person(name,age){
    this.name = name;
    this.age = age;
}

Person.prototype = {
    sayName : function(){
        return "my name is " + this.name;
        //alert(this.name)
    },
    sayAge : function(){
        return "I'am " + this.age + " old";
    }
}

var person = new Person("leo",29);

lisi = {
    name : "lisi"    
}

person.sayName.call(lisi);
alert(lisi.sayName());    // lisi.sayName is not a function

为什么呢?是我写法的问题吗?

第二个问题:
person.sayName.call(lisi)跟Person.call(lisi)的区别是什么?
我的理解是:后者借用了Person全部的属性跟方法,而前者只是借用了sayName方法而已。(我的理解好像是错的~55555)

解决方案

看完题主修改后的提问,终于知道问题在哪了:不是改变lisi的this让他拥有sayName,而是改变person.sayName的this,使得其能够访问lisi.name


alert(lisi.sayName()); // lisi.sayName is not a function

这很对啊,你之前不都写明了么,lisi只有一个属性name,哪来的sayName()
我不知道你是不是受到网上某些奇怪教程的影响,反正我看到过有一个教程把call等价为将Person中的代码复制到lisi里去了,这种等价显然是错的

Func.call(Obj)的用处是将Func置于Obj的上下文中去执行。简单来说,就是在执行Func假装当作Func是在Obj内部的一样,从而使Fun拥有访问Obj属性的能力

这篇关于javascript - js中call的使用问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆