现在有两个对象,需要实现Chinese类型对象对Person类型对象的继承。

这里分两部分,属性和方法。

属性可以直接用构造函数的方法实现继承,而方法则要通过原型链来实现继承。

先解释什么是原型链,每个对象创建的时候,都同时创建了一个该对象的原型对象,比如function F(){};创建的时候,不仅仅创建了F对象还创建了F对象的原型对象,可以通过F.prototype来访问这个对象。

那么这个原型对象有什么用处呢?

在对对象中的属性或方法进行引用的时候,如果对象中没有这个属性或方法,则系统会到对象的原型中去找,如果原型中找不到则继续去原型的原型中去找,这样就形成了一个原型链,大概你要为为什么对象的原型还有原型,其实对象的原型本身没有原型,但是我们可以认为的把它的原型指向另一个对象,那么这个对象的原型也就有了原型。就这么简单。

看看我扣弛的图片:

我们可以利用javascript类型对象的这个特性来实现对象的继承(或者说类的继承)。

看下面代码实现继承:

// JavaScript Document
function Person(name){
this.name = name;
}
function Chinese(name,nation){
Person.call(this,name);
this.nation = nation;
}
//属性放在构造函数中,方法放在原型链里
//现在定义Person的方法
Person.prototype.sayName = function(){
alert(this.name);
}
//下面是实现继承的过程
function F(){};
F.prototype = Person.prototype;
Chinese.prototype = new F();
//现在定义Chinese自己的方法,一定要先继承然后再定义自己的方法!!自己想想为什么,画出图来啥都有了。
Chinese.prototype.sayNation = function(){
alert(this.nation);
}
//现在可以试一下了
var c1 = new Chinese("JinTao","AnHui");
var c2 = new Chinese("JiaBao","HuBei");
c1.sayName();//JinTao
c1.sayNation();//AnHui
c2.sayName();//JiaBao
c2.sayNation();//HuBei

上面利用构造函数和原型链混合的方法实现了继承,其实还有很多方法可以实现继承,比如纯粹的构造函数,工厂模式,还有纯粹的原型链模式,这些都不如上面这种方法稳固。所以采用这种方式实现对象(类)的继承。

javascript对象继承的实现的更多相关文章

  1. JavaScript 对象继承 OOP (三)

      对象继承 A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. JavaScript 语言的继承不通过 class (es6 中的class 不过是 ...

  2. 详解JavaScript对象继承方式

    一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Parent 构造函数成为 Children 的方法,然 ...

  3. JavaScript对象 继承

    JavaScript继承主要依靠原型链实现. 原型链 利用原型让一个引用类型继承另一个引用类型水位属性和方法. 每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指 ...

  4. JavaScript对象继承方式

    一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Parent 构造函数 成为 Children 的方法, ...

  5. javascript对象继承详解

    问题 比如我们有一个"动物"对象的构造函数. function animal() { this.type = '动物'; } 还有一个"猫"对象的构造函数. f ...

  6. Javascript 对象继承 原型链继承 对象冒充 call 混合方式

    一.原型链继承 function ClassA() {} ClassA.prototype.color = "blue"; ClassA.prototype.sayColor = ...

  7. javascript对象继承

    一.实例化和继承的区别 构造函数.原型和实例的关系:每 个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型 对象的内部指针. 类(Class)和实例(Insta ...

  8. JavaScript创建对象及对象继承

    面向对象的语言有一个标志,那就是他们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是在ECMAScript中没有类的概念,因此它的对象也与基于类的对象有所不同.实际上,JavaSc ...

  9. web前端学习(二) javascript对象和原型继承

    目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...

随机推荐

  1. 蜘蛛牌(hdu 1584 DFS)

    蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. windows对象的属性和方法

    window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用标志符window来引用它. 一. windows对象的属性 1. locati ...

  3. Slack 开源替代品 Rocket.Chat(聊天,文件上传等等)

    Rocket.Chat 是特性最丰富的 Slack 开源替代品之一. 主要功能:群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,链接预览,文件上传,语音/视频 聊天,截图等等. Rocket.Chat ...

  4. CSS之清除浮动

    一.清除浮动的目的. 1.当一个父元素的高度不写或为auto时,而且这个父元素内又有浮动的子元素,那么这时候该父元素的高度将不会自动适应子元素的高度,也可以说高度是0px; 有如下代码: <di ...

  5. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

  6. eclipse下使用hibernate tools实现hibernate逆向工程

    一  安装hibernate tools插件 1 在线安装 通过Eclipse的Help->Install New Software 在线安装插件,插件连接为: eclipse helios(3 ...

  7. bzoj1684 [Usaco2005 Oct]Close Encounter

    Description Lacking even a fifth grade education, the cows are having trouble with a fraction proble ...

  8. poj 1001 求高精度幂

    本题的测试用例十分刁钻,必须要考虑到很多的细节问题,在这里给出一组测试用例及运行结果: 95.123 12 548815620517731830194541.899025343415715973535 ...

  9. Validate Binary Search Tree 解答

    Question Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is d ...

  10. nginx编译配置

    1, 正向代理是一个位于内网客户端和外网原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后由代理服务器向 原始服务器转交请求并将获得的内容返回给客户端.正向代理 ...