js 面向对象类
- 类的声明
- 继承的几种方法
类的声明
第一种
function car(){
this.name = 'name';
}
第二种。es6中新添加的
class car(){
constructor(){
this.name ='name';
}
}
继承的几种方法
1.构造函数实现继承
function Parent(){
this.name = 'parent';
}
Parent.prototype.toSay = function(){
console.log(this.name);
}
function Child(){
Parent.call(this);
this.name1 = 'child';
}
console.log(new Child())

原理:在子类中调用了父级的构造函数,并把上下文换成子类,只是部分继承
缺点:看到上面输出的就知道,父类的prototype上的方法继承不了
2、原型链继承
上面的方法父类的prototype的方法继承不了,就自然会想到把父类实例赋值给子类的prototype这样,因为Parent的实例的__proto__指向了Parent.prototype
function Parent(){
this.name='parent';
this.play = [1, 2, 3];
}
function Child(){
this.type="child";
}
Child.prototype = new Parent();
var c1 = new Child();
var c2= new Child();
c2.play.push(4);
console.log(c1.play, c2.play);
缺点:会改变原型链上的数值
优化组合方法一
function Parent(){
this.name= 'name';
this.play = [1, 2, 3];
}
function Child(){
Parent.call(this);
this.type = 'child'
}
Child.prototype = new Parent()
var c1= new Child();
var c2 = new Child();
c2.play.push(4);
console.log(c1.play, c2.play);
原理:这是上面两种方法的组合
缺点:父级的构造函数在子类实例的时候执行了两次
优化组合方法二
function Parent () {
this.name = 'parent';
this.play = [1, 2, 3];
}
function Child () {
Parent.call(this);
this.type = 'child';
}
Child.prototype = Parent.prototype;
var c1 = new Child();
var c2 = new Child();
console.log(c1 instanceof Child, c2 instanceof Parent);
console.log(c1.constructor);
原理:和上面的一种比较是不再实例Parent而是直接将Child.prototype指向Parent.prototype,这样parent原型链上有的方法,child也会有
缺点:子类的构造器是父类,而不是子类,因为他们共用了一个原型对象
完美的方法
function Parent(){
this.name = 'parent';
this.play=[1,2]
}
function Child(){
Parent.call(this)
this.type = 'child'
}
Child.prototype = Object.create(Parent.prototype)
Child.constructor = Child;
js 面向对象类的更多相关文章
- js面向对象--类式继承
//待研究//类式继承 //js中模拟类式继承的3个函数 //简单的辅助函数,让你可以将新函数绑定到对象的 prototype 上 Function.prototype.method = functi ...
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- js面向对象设计之class类
class 相对 function 是后出来的,既然 class 出来了,显然是为了解决 function 在处理面向对象设计中的缺陷而来.下面通过对比,来看看 class 作为 ES6 中的重大升级 ...
- js面向对象设计之function类
本文仅探讨如何合理的使用 function 在 javascript中实现一个面向对象设计的类.总所周知,javascript 并不能实现一个真正意义上的类,比如 protect 比如 函数重载.下面 ...
- js面向对象(对象/类/工厂模式/构造函数/公有和原型)
https://www.cnblogs.com/sandraryan/ 什么是对象 js中一切都是对象(有行为和特征).js允许自定义对象,也提供了内建对象(string date math等) 对象 ...
- JS面向对象编程创建类的方式
js创建类的方式有几种,大致如下: 1,构造函数方式: function Car(parameters) { this.name = "objectboy"; } var cat1 ...
- JS面向对象的类 实例化与继承
JS中 类的声明有两种形式: // 类的声明 function Animal() { this.name = 'name' } // ES6中的class声明 class Animal2 { cons ...
- JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
随机推荐
- Spark RDD基本操作
- log4j.rootLogger
log4j.rootLogger=INFO, FILE, CONSOLE log4j.rootLogger=TRACE, FILE, CONSOLE
- swing 托盘
直接上方法, 不过有些问题要注意,最后会说明! private void systemTray() { if (SystemTray.isSupported()) { // 判断系统是否支持托盘功能. ...
- Asp.net MVC使用EasyNetQ操作RabbitMQ
Demo下载地址:https://download.csdn.net/download/u010312811/11259742 .Net下操作RabbitMQ最常用的SDK是RabbitMQ.Clie ...
- 数据库的元数据抽取SQL
一.数据库驱动类.端口.默认用户名密码 数据库 驱动 端口 用户名 密码 MySQL com.mysql.jdbc.Driver 3306 root root DB2 com.ibm.db2.jcc. ...
- 手写代码注意点 -- int[]
int[].length char[] 的数组长度,是小写的l开头: char[].length; 不是:char[].Length int[] 没有.contains(), .indexOf() . ...
- [JZOJ3690] 【CF418D】Big Problems for Organizers
题目 题目大意 给你一棵树,然后有一堆询问,每次给出两个点. 问所有点到两个点中最近点的距离的最大值. 正解 本来打了倍增,然后爆了,也懒得调-- 显然可以在两个点之间的路径的中点处割开,一边归一个点 ...
- Java导出pdf文件数据
提示:导出pdf文件,需要3个jar包iText-2.1.5.jar,iTextAsian.jar,iText-rtf-2.1.4.jar. public boolean outputPdfJhsy( ...
- Pycharm中如何加载多个项目同时存在
原文地址: http://www.cnblogs.com/mrgavin/p/6382406.html 今天在使用Pycharm工具练习Python时遇到一个疑问:在已存有项目A工程的前提下如何新建另 ...
- IE6/IE7尿性笔记 && avalon && director
表单提交 [ie6] form默认特性(input回车以及点击type=submit的按钮会自动触发form submit),在ie6中,不能使button[submit],必须是input[subm ...