JavaScript面向对象(四)

call 方法的使用

官方文档是这么说的:调用一个对象的一个方法,以另一个对象替换当前对象。
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
官方文档写的太复杂,通过实例来测试。

function Person(name) {
  this.name = name;
  this.show = function () {
    console.log(this.name);
  }
}

function Man() {
  this.name = "Lucy";
}

var person = new Person("Jack");
var man = new Man();

person.show.call(man); // "Lucy"

此处输出的是 "Lucy"call 的意思是:将 Person 对象的 show 方法,放到 Man 对象中去执行,也就是说:在 Man 对象中去执行 Person 对象的 show 方法。
此时 show 方法被放置到 Man 对象中执行,方法中的 console.log(this.name); 就已经指向的是 "Lucy"

apply 方法的使用

applycall 方法的功能一致,不一样的地方在于参数列表。applycall 接收的第一个参数一样,都是对象,而第二个参数 apply 接收的是一个数组、call 接收的是一个参数列表。

  • Function.apply(object, args)
  • Function.call(object,args ...)

通过 call 或 apply 实现继承

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

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

var man = new Man("Lucy", 18);

console.log(man); // Man{name: "Lucy", age: 18}

多重继承

function Person(name) {
  this.name = name;
}
function Student(sex) {
  this.sex = sex;
}

function Man(name, sex, age) {
  Person.call(this, name);
  Student.call(this, sex);
  this.age = age;
}

var man = new Man("Lucy", 'M', 18); // Man{name: "Lucy", sex: 'M', age: 18}

console.log(man);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,871评论 6 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,461评论 0 4
  • 昨天在做面试题时遇到了这道题: 下面有关JavaScript中 call和apply的描述,错误的是? A. ca...
    荧惑3_3阅读 3,780评论 0 1
  • 想好好的准备考英语6级,看着卷子却又难以静下心来复习,以前英文是最棒的,现在看着阅读就头疼,目前的项目没有后台也不...
    十年一品温如言1008阅读 858评论 1 1
  • 学习是有方法和技巧的,但了解到之后需要自己多实践!操练中善于思考才会有更大进步!
    阳光_8bb8阅读 1,358评论 2 1