JavaScript继承有构造函数继承、原型继承、复制继承、构造函数/原型组合继承等方法,这些继承方法各有特点。目前最常用的就是构造函数/原型组合继承。/*** 实现继承* @param subType {Function} 子类构造函数* @param superType {Function} 父类构造函数*/functioninherit(subType, superType){functionF(){}F.prototype = superType.prototype;var p = new F();p.constructor = subType;subType.prototype = p; }/*** 父类...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>JavaScript中的继承</title><script type="text/javascript"> // 父类function Person(name,email){ // 父类的构造方法this.name = name ;this.email = email...
目录js面向对象编程js原型链共享方法原型继承 js面向对象编程js面向对象编程不同于 java 的类和对象JavaScript 不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。js声明的构造函数,类似于普通函数的声明,但又不同,实例对象时,如果不写new,就是一个普通函数,它返回 undefined。但是,如果写了new,它就变成了一个构造函数,它绑定的 this 指向新创建的对象,并默认返回 this,也就是说,不需要在最后写re...
ECMAScript只支持实现继承。原型链 ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么,假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的原型对象将...
这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。今天要介绍的是,对象之间的"继承"的五种方法。比如,现在有一个"动物"对象的构造函数。 function Animal(){ this.species = "动物"; }还有一个"猫"对象的构造函数。 function Cat(name,color){ this.name = name; this.color = color; }怎样才能使"猫"继承"动物"呢?一、 构造函数绑定第一种方法也是最简单的...
今天要介绍的是,对象之间的"继承"的五种方法。比如,现在有一个"动物"对象的构造函数。 function Animal(){ this.species = "动物"; }还有一个"猫"对象的构造函数。 function Cat(name,color){ this.name = name; this.color = color; }怎样才能使"猫"继承"动物"呢?一、 构造函数绑定第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中...
什么是继承 => 就是让一个对象使用了不属于自己的属性和方法继承的作用 => 将相关的构造函数之间的公共方法提取出来,放在一个公共的构造函数上,节省空间 八种继承的方法:(本文栗子全部使用 Student 构造函数继承 Person 类) // 准备一个公共的被继承的构造函数function Person(name) {this.name = name || ‘person‘this.age = 18 }Person.prototype.eat = function () {console.log(‘eatting‘) } 此构造函数在 new Person...
经典继承js中实现经典继承的方式是通过构造函数来实现的,即在子类中对父类调用call方法。 function Geometric() {this.time = "";this.color = "";this.base = function () {alert("Creating time is: " + this.time + " and color is: " + this.color)}}function Circle() {Geometric.call(this);this.radius = 0;this.area = function () {alert("the area is: " + Math.PI * this.radius * this.radius)}}function Rectangle(...
继承是 OO 语言中的一个最为人津津乐道的概念。许多 OO 语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于函数没有签名,在 ECMAScript 中无法实现接口继承。 ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的。 组合继承时 JavaScript 中常用的继承模式,而寄生组合式继承克服了组合继承的缺点,被认为是引用类型最理想的继承范式。 以下是《Java...
今天是最后一个部分,介绍不使用构造函数实现"继承"。一、什么是"非构造函数"的继承?比如,现在有一个对象,叫做"中国人"。 var Chinese = { nation:‘中国‘ };还有一个对象,叫做"医生"。 var Doctor ={ career:‘医生‘ }请问怎样才能让"医生"去继承"中国人",也就是说,我怎样才能生成一个"中国医生"的对象?这里要注意,这两个对象都是普通对象,不是构造函数,无法使用构造函数方法实现"继承"。二...
一、什么是"非构造函数"的继承?//比如,现在有一个对象,叫做"中国人"。var Chinese = {nation:‘中国‘ };//还有一个对象,叫做"医生"。var Doctor ={career:‘医生‘ } 请问怎样才能让"医生"去继承"中国人",也就是说,我怎样才能生成一个"中国医生"的对象? 这里要注意,这两个对象都是普通对象,不是构造函数,无法使用构造函数方法实现"继承"。二、object()方法 json格式的发明人Douglas Crockford,提出了一个obje...
一、原型 二、继承function Person(name){this.name=name; } Person.prototype.eat=function(){return"吃饭"; }function Student(name,sex){Person.apply(this,[name]);this.sex=sex; } Student.prototype=Object.create(Person.prototype); Student.prototype.study=function(){return"学习"; }var student=new Student("小明","男"); console.log(student.name); console.log(student.sex); console.log(student.eat()); console...
经常被问到js的继承以及原型链(prototype chain)的知识,每每看过之后都很快遗忘,现整理一下自己了解的情况,以加深了解。一、js对象 js里面都是对象,没有“类”的概念,我们使用new操作来从原型对象生成一个实例对象,例如: function Parent(name){ this.name = name; this.get = function(){ return this.name; } } 对这个构造函数(注意Parent不是一个类,只是一个构造函数...
1.原型模式function Father(){this.property = true;}Father.prototype.getValue = function(){ return this.property;}function Son(){ this.Sonproperty = false;}//继承FatherSon.prototype = new Father();//原型重写,contructor被改写Son.prototype.construtor = Son;//重新指向SonSon.prototype.getSonValue = function(){ return this.property;}var instance = new Son();console.log(instance.getValue());/*缺...
1.原型链function SuperType(){this.property = true;}SuperType.prototype.getSuperValue = function(){return this.property;};function SubType(){this.subproperty = false;}//继承了SuperTypeSubType.prototype = new SuperType();SubType.prototype.getSubValue = function (){return this.subproperty;};var instance = new SubType();alert(instance.getSuperValue()); //true实现的本质是重写原型对象,代之以一个新类型的...