js 函数对象的继承 inherit 带 插件完整解析版[helpers.js]
前言:
本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽。
本篇文章为您分析一下原生JS的对象继承方法
需求分析:
1. 普通用户功能
2. 会员用户功能
3. 会员用户需要拥有普通用户的所有功能,并且自身也要有自己的功能
JS行为:
/**
* 普通用户构造函数
* @param {*} firstName
* @param {*} lastName
* @param {*} age
*/
function User(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.fullName = this.firstName + " " + this.lastName;
}
// 普通用户构造函数的方法
User.prototype.sayHello = function () {
console.log(`大家好,我叫${this.fullName}, 加年${this.age}了`);
}
/**
* 会员用户构造函数
* @param {*} firstName
* @param {*} lastName
* @param {*} age
* @param {*} money
*/
function VIPUser(firstName, lastName, age, money) {
User.call(this, firstName, lastName, age);
this.money = money;
}
VIPUser.prototype.upgrade = function () {
console.log(`使用了${100}元软妹币升级了`);
this.money -= 100;
}
var vUser = new VIPUser("晓", "佰", 10, 100); // 调用构造函数

先来看看vUser的目前指向

代码虽少,理解不易
/**
* 对象的继承
* @param {Function} son 子类构造函数
* @param {Function} father 父类构造函数
*/
this.myPlugin.inherit = function (son,father) {
son.prototype = Object.create(father.prototype);
son.prototype.constructor = son;
son.prototype.uber = father.prototype;
}
这个函数一定要在最开始调用,因为他会改变他的原型
如果你在后面调用了,他肯定会覆盖了你原来的原型结构
son.prototype = Object.create(father.prototype);
Object.create是es5的方法
以前使用的是函数和创建一个新对象等方式
son.prototype = Object.create(father.prototype);



son.prototype.constructor = son;
!

我们在页面上打印vUser.__proto__.constructor看看效果

为了方便子类来获取父类的原型
我们在子类中添加一个属性来保留父类的原型
在页面上打印子类的父类看看

/**
* 雅虎公司的继承
* @param {Function} son 子类构造函数
* @param {Function} father 父类构造函数
*/
this.myPlugin.inherit = (function () {
var Temp = function () { };
return function (son, father) {
Temp.prototype = father.prototype;
son.prototype = new Temp();
son.prototype.constructor = son;
son.prototype.uber = father;
}
}());
结语
整完!!
js 函数对象的继承 inherit 带 插件完整解析版[helpers.js]的更多相关文章
- js 函数的防抖(debounce)与节流(throttle) 带 插件完整解析版 [helpers.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 函数防抖与节流是做什么的?下面进行通俗的讲解. 本文借鉴:h ...
- js 实现对象的混合与克隆效果,带完整版解析代码[helpers.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 对象混合 ...
- 关于js函数对象的理解
js中函数和对象的关系: 什么是对象?根据W3C上面的解释JS中所有事物都是对象,对象是拥有属性和方法的数据,由此可以看出除了基 本值类型不是对象(number.string.Boolean.Unde ...
- 关于js的对象原型继承(一)
javascript中,对象的继承是通过原型去继承. 可以这样理解:js中的对象,包含的除了属性和方法,还有一个最基本的原型__proto__对象.这个原型__proto__指向谁,这个对象就继承谁. ...
- 认识js函数对象(Function Object)
认识函数对象(Function Object) 可以用function关键字定义一个函数,对于每个函数可以为其指定一个函数名,通过函 数名来进行调用.这些都是代码给用户的印象,而在JavaScript ...
- js函数对象
函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很 ...
- js 函数对象
函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解: javaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的,通过函数对象的性质,可以很 ...
- js 实现图片瀑布流效果,可更改配置参数 带完整版解析代码[waterFall.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片瀑布流效果 页面需求 1 ...
- 关于js的对象原型继承(二)
本章讨论使用new一个构造函数来创建一个对象. 前期知识点说明: 1.prototype是函数的一个属性,每个函数都有一个prototype属性.这个属性是一个指针,指向一个对象.它是显示修改对象的原 ...
随机推荐
- 字符串学习笔记(三)---- StringBuilder
一.前言 StringBuilder是jdk1.5后出现的,而StringBuffer是jdk1.0就出现了,并且在功能上俩者并无太大区别.但为什么后来要添加一个StringBuilder呢?这是为了 ...
- thinkphp后端开发ajax接口开发测试
数据自动填充,Firefox的网络查看JSON数据,查错. 同时,用getLastSql函数查询,并且开启日志文件记录网页执行的全过程,还可以用thinkPHP内置的trace的跟踪. 谁有更好地方法 ...
- Java第二十八天,Lambda表达式
一.函数式编程 1.什么是函数式编程 函数式编程是种编程方式,是一种编程的思维,它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用.它的地位等同于面向对象 ...
- 29.3 ArrayList、List、LinkedList(链表)优缺点
ArrayList.List特点:查询快.增删慢 链表特点:查询慢,增删快 案例 package day29_collection集合体系; import java.util.ArrayList; i ...
- <E> 泛型
/* * 使用集合存储自定义对象并遍历 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常, * 所以java为了解决这个问题,给我们提供了一种机制, ...
- es分页条数限制
"error": { "root_cause": [ { "type": "query_phase_execution_excep ...
- "被删除的文本"组件:<del> —— 快应用组件库H-UI
 <import name="del" src="../Common/ui/h-ui/text/c_tag_del"></import> ...
- 【高并发】不废话,言简意赅介绍BlockingQueue
写在前面 最近,有不少网友留言提问:在Java的并发编程中,有个BlockingQueue,它是个阻塞队列,为何要在并发编程里使用BlockingQueue呢?好吧,今天,就临时说一下Blocking ...
- 安全测试-WEB安全渗透测试基础知识(四)
.4. HTTP标准 1.4.1. 报文格式 1.4.1.1. 请求报文格式 <method><request-URL><version> <headers& ...
- python圆周率计算小程序(非常慢)
源码: from math import fabs #导入数学模块 from time import perf_counter #导入时间模块 from numba import jit @jit d ...