摘要:的类与继承的类与一般的面向对象语言有很大的不同,类的标识是它的构造函数,下面先定义一个类显然我们可以看出这两个函数是不同的,虽然它们实现了相同的功能。利用构造函数来继承上面的方法子类显然无法继承父类的原型函数,这样不符合我们使用继承的目的。
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;
这是一种折衷的继承方式,本质上把子类的所有对象绑定到父类的一个对象上,子类原型方法就是这个对象的一个属性。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85429.html
摘要:类的方法相当于之前我们定义在构造函数的原型上。的构造函数中调用其目的就是调用父类的构造函数。是先创建子类的实例,然后在子类实例的基础上创建父类的属性。 前言 首先欢迎大家关注我的Github博客,也算是对我的一点鼓励,毕竟写东西没法获得变现,能坚持下去也是靠的是自己的热情和大家的鼓励。 许久已经没有写东西了,因为杂七杂八的原因最近一直没有抽出时间来把写作坚持下来,感觉和跑步一...
摘要:在类内部的方法中使用时。类的私有方法两个下划线开头,声明该方法为私有方法,不能在类地外部调用。先在本类中查找调用的方法,找不到才去基类中找。如果在继承元组中列了一个以上的类,那么它就被称作多重继承。 类定义 类对象:创建一个类之后,可以通过类名访问、改变其属性、方法 实例对象:类实例化后,可以使用其属性,可以动态的为实例对象添加属性(类似javascript)而不影响类对象。 类...
摘要:首先捋清楚类和对象的关系类比如人类,指的是一个范围对象比如某个人,指的是这个范围中具体的对象中的作为构造函数时,就是一个类,通过操作符,可以返回一个对象。 JS中的类与类的继承 我们知道,JS中没有类或接口的概念,即不能直接定义抽象的类,也不能直接实现继承。不过,为了编程的方便,我们可以在 JS 中模拟类和继承的行为。首先捋清楚类和对象的关系: 类:比如人类,指的是一个范围; ...
摘要:前言是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。面对对象基本概述概述是基于面向过程的变成思想,是对面向过程的一种封装。面对对象开发就是不断的创建对象,使用对象,指挥对象做事情。面对对象设计其实就是在管理和维护对象之间的关系。 前言 java是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。 面对对象,主要包括:面向对象思想,类与对象及其使用,对象的内存图,成...
阅读 708·2021-11-08 13:22
阅读 2812·2021-09-29 09:45
阅读 2777·2021-09-09 11:52
阅读 2225·2019-08-30 13:20
阅读 3703·2019-08-29 13:28
阅读 1312·2019-08-29 12:32
阅读 2530·2019-08-29 11:10
阅读 1598·2019-08-26 13:34