js 继承发展史

一、传统模式 – 利用原型链

Grand.prototype.lastName = '王五';
function Grand() {}
var grand = new Grand();Father.prototype = grand;
function Father() {this.name = '李四'
}
var father = new Father();Son.prototype = father;
function Son() {}
var son = new Son();
console.log(son.name); // 李四
console.log(son.lastName); // 王五

缺点是:继承了过多的无用属性

二、借用构造函数

function Student(name, age, sex) {this.name = name;this.age = age;this.sex = sex;
}function Person(name, age, sex, grade) {Student.call(this, name, age, sex);this.grade = grade;
}var person = new Person('mary', 18, 'female', 550);
console.log(person.name); // marry

缺点:不能继承借用构造函数的原型,只能借用构造函数的方法, 每次构造函数都要多走一个函数,只是从视觉上变少了而已

三、共享原型

Student.prototype = Person.prototype; // 把两个原型的地址都引向 Person 的原型
Student.prototype.name = 'mary';
function Student() {}function Person() {}var person = new Pereson();
console.log(person.name); // mary// 						Person.prototype	
// 			Student                            Father// 原型是构造函数构造出的对象的公有祖先
// 现在多个构造函数共用了一个原型

小小升级一下

Father.prototype.lastName = 'smith';
function Father() {}function Son() {}// 用一个函数传参
function inherit(Target, Origin) {Target.prototype = Origin.prototype;
}inherit(Son, Father);var son = new Son();
console.log(son.lastName); // smith
// 这种方法的缺点是,每个构造函数想给自己的原型上加一个属性,其他的构造函数原型也会受到影响
// 我们需要的是,每个构造函数能单独给自己的原型设置属性,不影响其他人,但是又需要其他人原型上提供的属性

缺点:不能随便改动自己的原型

四、圣杯模式

function inherit(Target, Origin) {function F() {}F.prototype = Origin.prototype;Target.prototype = new F();Target.prototype.constructor = Target;Target.prototype.uber = Origin.prototype;
}Father.prototype.lastName = 'mary';function Father() {}function Son() {}var father = new Father();
var son = new Son();

五、联想一下闭包私有化的应用

function Student(name, age) {var str = '我供你们使用';this.name = name;this.age = age;this.doing = function() {this.age = str;}this.dance = function(Target) {str = Target;}this.say = function() {console.log(str);}
}var student = new Student('mary', 18);

六、结合闭包私有化,升级圣杯模式

var inherit = (function () {var F = function() {};return function (Target, Origin) {F.prototype = Origin.prototype;Target.prototype = new F();Target.prototype.constructor = Target;Target.prototype.uber = Origin.prototype;}
}());function Father() {}function Son() {}inherit(Son, Father);
var father = new Father();
var son = new Son();

七、空间命名问题

通过闭包实现变量私有化

var name = 'smith';
var init = (function () {// 这里面的所有变量命名,跟外面没有关系var name = 'mary';function callName() {console.log(name);}return function () {callName(); // 这是一个函数的接口}
});

像jQuery一样,实现一个方法的连续调用

var obj = {smoke: function() {console.log('i am smoking');return this;},drink: function() {console.log('i am drinking');return this;},prem: function() {console.log('i am preming');return this;}
};obj.smoke().drink().prem(); // 模仿 jQuery 链式调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 调用webservice_js跨域调用WebService的简单实例

步骤1. 在web.config中的system.web节点里加入步骤2.webservice代码using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Mvc;namespace WebService{/// /// WebService1 的摘要说明/// [WebServic…

SpringBoot整合oss实现文件的上传,查看,删除,下载

springboot整合oss实现文件的上传,查看,删除,下载 1.什么是对象存储 OSS? 答:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低…

属性的表示方法和对象的枚举

对象 一、对象.属性 var obj {name : mary,age : 18 };console.log(obj.name, obj.age); // mary 18二、对象[‘属性’] – 让对象属性更加灵活 var zhang {wife1: {name: xiaomei},wife2: {name: xiaoli},wife3: {name: xiaowang},wife4: {name: xiaoxiao},sayWife: funct…

docker 启动成功但无法访问_docker nginx 运行后无法访问的问题解决

## 1最近在学docker部署,一开始打算将nginx先docker化的。对照官方的docker镜像介绍说明,进行自定义配置将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是屏蔽了default.conf,以及include文件夹 sites-avail…

minio实现文件上传下载和删除功能

前言 之前用到文件上传功能,在这里做个学习记录。使用minio实现,后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较(oss根据流量收费)。minio的中文文档:https://docs.min.io/cn/ minio安装 首先查询d…

ES6 let 和 const 关键字

一、ES5 的 var 关键字 var 存在变量提升var 允许重复声明,浏览器本身只识别一次,但不会报错var 声明的变量即是全局变量,也相当于给 GO(window) 设置了一个属性而且两者建立映射机制基于 typeof 检测一个没有被声明过的变量,并不…

Spring Boot配置MinIO(实现文件上传、下载、删除)

1 MinIO MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小&#xff…

js 里面令人头疼的 this

JS中this相关问题梳理 this 就是 js 里的关键字,有特殊意义,代表函数执行主体 一、定义 函数执行主体(不是作用域):意思是谁把函数执行了,那么执行主体就是谁 二、使用情况 全局作用域里的this 是window…

大数据专业考研书_考研必知大数据(完整版)

由上面的两组图表,不难看出,历史和医学的读研比例遥遥领先。另外由图可知,全国有百分之十三的本科生选择了毕业后读研,而这其中有近三成的人是选择了在读研时转换专业。部分省份报名人数汇总结合历年报考人数统计数据来看&#xf…

Java8 stream().map()将对象转换为其他对象

Java8 stream().map()将对象转换为其他对象 1: 将对象List转为List public class user{private String name;private String password;private String address;private String age;}List<String> name user.stream().map(x -> x.getName()).collect(Collectors.toLi…

改变 this 指向的 call 和 apply

一、call 方法 基本用法 function test() {console.log(hello world); } test(); // hello world test.call(); // hello world // test() > test.call()其实就是借用别人的方法&#xff0c;来实现自己的功能 function Person(name, age) {// this objthis.name name;th…

python爬去百度百科词条_python简单爬虫爬取百度百科python词条网页

目标分析&#xff1a;目标&#xff1a;百度百科python词条相关词条网页 - 标题和简介入口页&#xff1a;https://baike.baidu.com/item/Python/407313URL格式&#xff1a;- 词条页面URL&#xff1a;/item/xxxx数据格式&#xff1a;- 标题&#xff1a;***- 简介&#xff1a;***页…

Stream中toMap引发NullPointerException____Stream的执行流程

Stream中toMap引发NullPointerException 1、引发NullPointerException的代码如下&#xff1a; List<SelfSettlementCardInfoDto> selfSettlementCardInfoDtos selfCardAdapterManager.listSelfSettlementCardInfoDtoByCardIds(queryDto.getPartnerId(), cardIds, false…

db2 最大分区数_db2 查询表分区数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

ES6 Symbol 数据类型

ES6-Symbol 类型 ES5 除类数组对象&#xff08;类数组对象名可以为数字&#xff0c;对象必须有 length 属性&#xff0c;可以用数组下标的方式访问对象属性&#xff0c;但不能通过点的方式访问&#xff09;外&#xff0c;对象属性名都是字符串&#xff0c;这很容易造成属性名的…

word中图片为嵌入式格式时显示不全_图片在word中显示不全怎么处理_word图片显示不全怎么办-win7之家...

我们在编辑word文档时&#xff0c;会需要插入一些图片来做为装饰或者用来标识&#xff0c;也会出现插入的图片显示不全的情况&#xff0c;要是遇到这种情况该怎么办&#xff0c;那么图片在word中显示不全要怎么处理呢&#xff0c;下面小编给大家分享图片在word中显示不全的解决…

Map集合使用get方法返回null抛出空指针异常问题

Map集合使用get方法空指针异常问题 前言 1.Map里面只能存放对象&#xff0c;不能存放基本类型&#xff0c;例如int&#xff0c;需要使用Integer 2.Map集合取出时&#xff0c;如果变量声明了类型&#xff0c;会先进行拆箱&#xff0c;再进行转换。 空指针问题 如图&#xff…

ES6 扩展运算符

ES6 数组相关 一、扩展运算符 … 用于函数调用 将一个数组变为参数序列&#xff1b;可与正常的函数参数结合使用&#xff1b;扩展运算符后面也可以放表达式&#xff1b;如果扩展运算符后面是空数组&#xff0c;不产生任何结果。只有函数调用时&#xff0c;扩展运算符才可以放…

android gone动画_Android动画之淡入淡出

为了更好的说明Android动画的淡入淡出效果&#xff0c;这里以一个场景为例&#xff1a; 界面上有两个View 控件&#xff0c;两个View交替显示&#xff0c;当一个View淡入显示&#xff0c;另一个View淡出不可见。我们把当前要显示的View叫showView, 要隐藏不可见的view叫hideVie…

java各map中存放null值

java中各map中是否可以存储null值情况