js实现继承 非es6

在高级语言中,面向对象是个很重要的概念。一提到面向对象,我们都会想到三大特征——封装,继承,多态。今天本文介绍的就是使用javascript实现继承。(ES6中已经支持class关键字来定义类)

直接看源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js 继承</title>
</head>
<body>
    
    <script>
        function Person(name,age) {
            this.name = name;
            this.age  = age;
        }

        Person.prototype.sayInfo = function(){
            console.log("Person say: name is"+this.name+",age is"+this.age);
        }

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

        Male.prototype.sayInfo = function(){
            Person.prototype.sayInfo.call(this);
            console.log("Gender is "+this.gender);
        }

        var m =new Male('yinxiaofei','24','male');
        m.sayInfo();
    </script>
</body>
</html>

特别需要注意的是子类Male中的

Person.prototype.sayInfo.call(this);

如果写成下面的代码,

Person.prototype.sayInfo();

则会打印出 :

Person say: name is undefined,age is undefined

ECMA-262 JavaScript/EcmaScript标准中, Call()方法是所有Function实例的一个成员方法,这已经被所有的主流浏览器所支持。JavaScript把所有的function看作对象,因此每个function都具有方法和附着其上的属性。Call()方法允许你调用某个function,并在function的调用过程中确定 “this”变量应该是什么。JavaScript的function没有被紧紧地绑定到它所在的对象上,所以如果你没有显式地使用call()方法, “this”变量将成为function所在的对象。
另外一种方法是使用apply方法,它和call()方法类似,只在参数上存在不同:apply()方法接受参数的数组,而call()方法接受单个参数。
附apply方法,特殊用途:

求一个数组的最大值:
Math.max.apply(null,[1,3,2]);  //3
原理:Math.max(1,3,2);

合并2个数组:
var arr1=[1,3,4];
var arr2=[3,4,5];
Array.prototype.push.apply(arr1,arr2);  //返回值6  arr1变为[1,3,4,3,4,5]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,378评论 2 17
  • 继承 一、混入式继承 二、原型继承 利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的...
    magic_pill阅读 4,693评论 0 3
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,456评论 0 4
  • 听老人们讲,包头城有好几百年的历史,这里很早以前,就是蒙汉民族,交流贸易的一个散集地。它也是晋商曾经发迹的地方。 ...
    兰如纯阅读 1,846评论 0 0
  • 一:引入object-c语言写的第三方库 1.new 一个 file,选“empty”, 命名为:Podfile。...
    我真不是他舅阅读 8,506评论 0 1