javascript中的继承

转载 2012年03月21日 11:11:16

一)对象冒充方式

function Father(username) {
    this.username = username;
    this.sayName = function() {
        alert(this.username);
    };
}

function Son(username, password) {
    this.method = Father;
    this.username(username);
    delete this.method;// 关键

    this.password = password;
    this.sayPassword = function() {
        alert(this.password);
    };
}

var father = new Father('papa');
var son = new Son('bab', '123');
father.sayName();
son.sayName();
son.sayPassword();

二)Call方法方式:call方法是function对象中的方法,因此我们定义的每个函数都有该方法,通过函数名来调用该方法,call方法的第一个参数会被传递给函数中的this,从第二个参数开始,逐一赋值给函数中的参数

function Father(username) {
    this.username = username;
    this.sayName = function() {
        alert(this.username);
    };
}

function Son(username, password) {
    Father.call(this, username);
    this.password = password;
    this.sayPassword = function() {
        alert(this.password);
    };
}

三)Apply方法方式

function Father(username) {
    this.username = username;
    this.sayName = function() {
        alert(this.username);
    };
}

function Son(username, password) {
    Father.apply(this, new Array(username));
    this.password = password;
    this.sayPassword = function() {
        alert(this.password);
    };
}

四)原型链方式

function Father() {
}
Father.prototype.hello = "hello";
Father.prototype.sayHello = function() {
    alert(this.hello);
};

function Son() {
}
Son.prototype = new Father();
Son.prototype.world = "world";
Son.prototype.sayWorld = function() {
    alert(this.world);
};

var son = new Son();
son.sayHello();
son.sayWorld();

五)混合方式(推荐)

function Father(hello) {
    this.hello = hello;
}
Father.prototype.sayHello = function() {
    alert(this.hello);
};

function Son(hello, world) {
    Father.call(this, hello);
    this.world = world;
}
Son.prototype = new Father();
Son.prototype.sayWorld = function() {
    alert(this.world);
};

var son = new Son('hello', 'world');
son.sayHello();
son.sayWorld();



Javascript中的几种继承方式比较

开篇 从’严格’意义上说,javascript并不是一门真正的面向对象语言。这种说法原因一般都是觉得javascript作为一门弱类型语言与类似java或c#之类的强型语言的继承方式有很大的区别,...
  • kkkkkxiaofei
  • kkkkkxiaofei
  • 2015年06月12日 17:32
  • 10663

JAVA经典面试题(二)--如何体现JavaScript的继承关系?

js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承)由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念。所以,要想实现继承,可以用j...
  • JacXuan
  • JacXuan
  • 2017年04月11日 15:28
  • 27916

JavaScript的继承与多继承

虽然最新的EC6里边已经有了class的相关功能,但是从普及度上和阅读旧代码需求的方面来看,这点知识也得了解一下。 本文结构: 原理及分析 简单封装后的运用 1.继承1.1原理及分析先上一张图:用这段...
  • FangboC
  • FangboC
  • 2016年01月24日 20:33
  • 329

Javascript实现继承的6种方式

一.类式继承 简介:将父类对象的实例赋值给子类的原型,则子类的原型可以访问父类原型上的属性和方法,以及父类构造函数中复制的属性和方法。 //1.类式继承 //声明父类 function SuperCl...
  • qq_31280709
  • qq_31280709
  • 2016年08月06日 16:37
  • 1490

说说 JavaScript 如何实现对象继承

1 原型链可以利用 JavaScript 原型,让一个引用类型继承另一个引用类型的属性和方法://父类 function SuperType() { this.property = true;...
  • deniro_li
  • deniro_li
  • 2017年03月23日 14:55
  • 396

《JavaScript高级程序设计 第三版》学习笔记 (五) 继承详解

2014.8.30 面向对象语言有两种继承方式:接口继承(只继承方法名);实现继承(继承实际的方法)。但在ECMAScript中,函数名没多大含义,只是函数体的引用而已,因此,ECMAScr...
  • lbxx1984
  • lbxx1984
  • 2014年08月29日 17:25
  • 417

再看javaScript伪经典继承

为什么叫伪经典继承呢,因为javaScript中真的没有类。         这里是两个伪经典继承的例子,第一种看上去更容易明明白,第二种只是在第一种的基础上对继承的细节进行了封装,使用起来更简单友好...
  • JQuery_QQ
  • JQuery_QQ
  • 2016年05月26日 17:39
  • 367

JavaScript原型的工作原理(以及如何利用它来实现类的继承)

在上一篇文章里,我们以及详细分析过构造函数,还有怎样将其变成面向对象语言里的类。但是JavaScript不是基于类的编程语言,它是基于原型的编程语言。这到底是什么意思呢?简单来说,JavaScript...
  • zlxadhkust
  • zlxadhkust
  • 2014年04月27日 17:41
  • 1171

JavaScript中的几种继承方式

JavaScript中的几种继承方式: 一:原型链      让原型对象等于另一个类型的实例.此时,原型对象包含一个指向另一个原型的指针,相应地,另一个原型中也包含着指向另一个构造函数的指针. ...
  • YLXB2
  • YLXB2
  • 2017年02月25日 14:26
  • 372

JS中多继承的几种实现方法

先了模拟一下new操作符的作用: function Person(name){ this.name = name; } Person.prototype.say = function(){ ...
  • kittyjie
  • kittyjie
  • 2017年06月16日 09:12
  • 1013
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript中的继承
举报原因:
原因补充:

(最多只允许输入30个字)