美文网首页
javascript的类与继承

javascript的类与继承

作者: suemi | 来源:发表于2014-11-03 22:44 被阅读23次

javascript的类与继承


javascript的类与一般的面向对象语言有很大的不同,类的标识是它的构造函数,下面先定义一个类

var User=function(name){
    this.name=name;
};
User.getName=function(){return this.name;};
User.prototype.get_name=function(){return this.name};
user1=new User('kkk');
user2=new User('jjj');
user1.getName=function(){console.log('hello');};
user1.get_name=function(){console.log('hello');};

显然我们可以看出这两个函数是不同的,虽然它们实现了相同的功能。
接下来我们先解释构造函数,当我们使用new操作符生成对象时,对象在进入函数之前就已经存在了,构造函数所完成的仅仅是初始化的工作。

每个javascript的函数都生而具有prototype这一属性,它们的new 与prototype.constructor有关。有以下关系存在:

User.prototype.constructor===User
true

同时类的静态方法如getName并不是一种值得推荐的方法,因为对于每一个被创建的对象都会创建相应的函数对象,方法在这里与其他的属性并无任何不一致之处。

通过工厂方法创建类

var User=function(name){
    var user;
    user.name=name;
    user.getName=function(name){return user.name;};
    return user;
}();

通过工厂方法可以直接创建继承了原型方法的对象,但是这样得到的问题在于没有prototype属性,需要手动添加,不推荐这种方法。

下面开始讲继承的方法,先给出一种示例

function Vip(name,level){
    this.name=name;
    this.level=level;
}
Vip.prototype=User;
alert(Vip.prototype.construtor===Vip);//false

这样显然不行,对子类的任何方法的改变都会导致父类的方法改变,更严重的是继承链遭到破坏。

利用构造函数来继承

function Vip(name,level){
    User.call(this,name);
    this.level=level
}
User.prototype.hehe=function(){console.log('hehe');};
(new Vip('kf',2)).hehe();//error!

上面的方法子类显然无法继承父类的原型函数,这样不符合我们使用继承的目的。

function Vip(name,level){
    this.name=name;
    this.level=level;
}
Vip.prototype=new User();
Vip.prototype.constructor=Vip;

这是一种折衷的继承方式,本质上把子类的所有对象绑定到父类的一个对象上,子类原型方法就是这个对象的一个属性。

相关文章

  • JavaScript类与继承

    一、ECMAScript 5标准中的类 1、定义原型类 2、原型类继承 下面是一典型的关于原型继承的代码。 3、静...

  • [JavaScript]“类”与“继承”

    The rule is simple: if a property or a method is not foun...

  • JavaScript类与继承

  • javascript的类与继承

    javascript的类与继承 javascript的类与一般的面向对象语言有很大的不同,类的标识是它的构造函数,...

  • 继承

    继承:让子类拥有父类的属性和方法//继承是类与类之间的关系谈继承是一个悖论:JavaScript是函数编程流派,是...

  • JavaScript 面向对象的那些事儿

    一、类与实例 1、类的声明 2、生成实例 生成实例,都是用new方法,如下: 二、类与继承 JavaScript的...

  • JavaScript - 继承和类

    JavaScript - 继承和类 在这一篇中,我要聊聊 JavaScript 中的继承和“类”。 首先跟你请教下...

  • JavaScript 类继承与原型继承的区别

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Somet...

  • JavaScript 类继承与原型继承的区别

    在 ES6 之前,JavaScript 实现两个对象的继承一般有两种方法。 一种方法是利用 this 与构造函数。...

  • javascript 类继承

    1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,...

网友评论

      本文标题:javascript的类与继承

      本文链接:https://www.haomeiwen.com/subject/jvfbtttx.html