使用Object.create()实现继承 用 Object.create实现类式继承
使用Object.create()实现继承:https://www.cnblogs.com/cuew1987/p/4075027.html
用 Object.create实现类式继承:https://www.jianshu.com/p/561432a109d6
一、常见继承方式
我们日常开发中常见的继承方式主要有: 1、默认模式:
1
|
Child.prototype = new Parent(); |
2、借用构造函数:
1
2
3
|
function Child(a, b, c, d) { Parent.apply( this , arguments); } |
3、借用和设置原型:
1
2
3
4
|
function Child(a, b, c, d) { Parent.apply( this , arguments); } Child.prototype = new Parent(); |
4、共享原型:
1
|
Child.prototype = Parent.prototype; |
5、使用临时构造函数:
1
2
3
|
var Proxy = function () {}; Proxy.prototype = Parent.prototype; Child.prototype = new Proxy(); |
6、extend属性复制:
1
2
3
4
5
6
7
8
9
10
11
|
function extend(parent, child) { child = child || {}; for ( var key in parent) { if (parent.hasOwnProperty(key)) { child[key] = parent[key]; } } return child; } |
当然在一些javascript库中(jQuery),还存在浅复制和深复制。 7、原型继承模式:
1
|
Object.create(Parent); |
二、Object.create实现继承
本文将来学习第七种继承方式Object.create()方法来实现继承,关于此方法的详细描述,请戳这里。下面来通过几个实例来学习该方法的使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
var Parent = { getName: function () { return this .name; } } var child = Object.create(Parent, { name: { value: "Benjamin" }, url : { value: "http://www.zuojj.com" } }); //Outputs: Object {name: "Benjamin", url: "http://www.zuojj.com", getName: function} console.log(child); //Outputs: Benjamin console.log(child.getName()); |
我们再来看一个例子,再添加一个继承:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
var Parent = { getName: function () { return this .name; }, getSex: function () { return this .sex; } } var Child = Object.create(Parent, { name: { value: "Benjamin" }, url : { value: "http://www.zuojj.com" } }); var SubChild = Object.create(Child, { name: {value: "zuojj" }, sex : {value: "male" } }) //Outputs: http://wwww.zuojj.com console.log(SubChild.url); //Outputs: zuojj console.log(SubChild.getName()); //Outputs: undefined console.log(Child.sex); //Outputs: Benjamin console.log(Child.getName()); |
通过上面可以看出Object.create()方法实现了链式继承,及原型链的继承。如果在控制台打印出各个生成的对象,可以很清楚的看到。
1
2
3
4
|
//Outputs: true console.log(Child.isPrototypeOf(SubChild)); //Outputs: true console.log(Parent.isPrototypeOf(Child)); |
isPrototypeOf() 方法测试一个对象是否存在于另一个对象的原型链上。 以上就是本文对Object.create方法的描述,文中不妥之处,还望批评指正。
使用Object.create()实现继承 用 Object.create实现类式继承的更多相关文章
- js原生设计模式——2面向对象编程之继承—原型继承(类式继承的封装)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 精读JavaScript模式(八),JS类式继承
一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码 ...
- JS原型继承和类式继承
前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...
- JavaScript 类式继承与原型继承
交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...
- JavaScript中的类式继承和原型式继承
最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...
- javascript类式继承函数最优版
直接上代码: klass函数 var klass = function (Parent, props) { var Child, F, i; //1.新构造函数 Child = function () ...
- js类式继承模式学习心得
最近在学习<JavaScript模式>,感觉里面的5种继承模式写的很好,值得和大家分享. 类式继承模式#1--原型继承 方法 让子函数的原型来继承父函数实例出来的对象 <script ...
- JS面向对象组件 -- 继承的其他方式(类式继承、原型继承)
继承的其他形式: •类式继承:利用构造函数(类)继承的方式 •原型继承:借助原型来实现对象继承对象 类 : JS是没有类的概念的 , 把JS中的构造函数看做的类 要做属性和方法继承的时候,要分开继 ...
- js面向对象--类式继承
//待研究//类式继承 //js中模拟类式继承的3个函数 //简单的辅助函数,让你可以将新函数绑定到对象的 prototype 上 Function.prototype.method = functi ...
随机推荐
- keep-alive前进没有刷新
https://segmentfault.com/a/1190000012083511
- 【leetcode】1224. Maximum Equal Frequency
题目如下: Given an array nums of positive integers, return the longest possible length of an array prefi ...
- 【leetcode】1184. Distance Between Bus Stops
题目如下: A bus has n stops numbered from 0 to n - 1 that form a circle. We know the distance between al ...
- UFUN函数 UF_TRNS(平移 变换)( uf5943 , uf5947)
//设置class_dialog选择过滤 static int init_proc(UF_UI_selection_p_t select,void* user_data) { ; //实体 片体 UF ...
- ELK结合logback
之前ELK的安装可以查看前面一篇博客 下面是我的logback的配置文件,通过logback的appender直接导入logstash <?xml version="1.0" ...
- css使用1
一.引入css的三种方式 一.CSS(Cascading Style Sheet):层叠样式表 二.CSS样式由两个组成部分:选择器和声明.声明又包括属性和属性值.每个声明之后用分号结束 语法结构 选 ...
- DVWA--XSS(DOM)
0X01爱之先了解 DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型 ...
- Phaser3 场景Scene之间的传值 -- HTML网页游戏开发
一.首先当然得有至少有二个场景sceneA.js,sceneB.js 二.从场景A传值到场景B二种方法 1)通过事件this.events.emit('event key',{objKey:objVa ...
- 20182335实验一《Linux基础与Java开发环境》
课程:<程序设计与数据结构> 班级: 1823 姓名: 李金泉 学号:20182335 实验教师:王志强 实验日期:2019年9月9日 必修/选修: 必修 1.实验内容 基于命令行和IDE ...
- 初识java虚拟机——JVM
1.Java程序运行过程 编写 编译 运行 过程如图所示: 2.JVM的认识 定义:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚 ...