js高级第三天

原型链

作用:提供一个成员的查找机制,或者查找规则含义:由原型所串联起来的链装结构

在这里插入图片描述

JavaScript 的成员查找机制(规则)

当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。如果没有就查找它的原型(也就是__proto__指向的prototype 原型对象)。如果还没有就查找原型对象的原型(Object的原型对象)。依此类推一直找到Object 为止(null)。__proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。// console.log(Star.prototype.__proto__.__proto__);
// console.log(Object.prototype);

扩展内置对象

可以通过原型对象,对原来的内置对象进行扩展自定义的方法。比如给数组增加自定义求偶数和的功能。
console.log( Array.prototype );// 添加求和方法Array.prototype.sum = function () {var sum = 0;for (var i = 0; i < this.length; i++) {sum += this[i];}return sum;}var arr = [1,2,3];console.log( arr.sum() );var newArr = [6,7,8,9];console.log( newArr.sum() );

继承

ES6之前并没有给我们提供extends继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。
call()调用这个函数, 并且修改函数运行时的this 指向fun.call(thisArg, arg1, arg2, ...);call把父类的this指向子类thisArg :当前调用函数this 的指向对象arg1,arg2:传递的其他参数

利用构造函数实现子类的继承:

属性的继承

function Father (uname,age) {// this指向父类的实例对象this.uname = uname;this.age = age;// 只要把父类的this指向子类的this既可}function Son (uname, age,score) {// this指向子类构造函数// this.uname = uname;// this.age = age;// Father(uname,age);Father.call(this,uname,age);this.score = score;}Son.prototype.sing = function () {console.log(this.uname + '唱歌');}var obj = new Son('刘德华',22,99);console.log(obj.uname);console.log(obj.score);obj.sing();

方法的继承:

实现方法把父类的实例对象保存给子类的原型对象

一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法。核心原理:①将子类所共享的方法提取出来,让子类的prototype 原型对象= new 父类()  ②本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象③将子类的constructor 

function Father () {}Father.prototype.chang = function () {console.log('唱歌');}function Son () {}// Son.prototype = Father.prototype;Son.prototype = new Father();var obj = new Son();obj.chang();Son.prototype.score = function () {console.log('考试');}// obj.score();// console.log(Son.prototype);console.log(Father.prototype);

注意:一定要让Son指回构造函数

实现继承后,让Son指回原构造函数Son.prototype = new Father();Son.prototype.constructor = Son;

总结:用构造函数实线属性继承,用原型对象实线方法继承

组合继承:构造函数和原型对象

​ 属性:调用父构造函数,用call改变this指向

​ 方法:父实例对象赋值给子原型对象,最后再指回构造函数本身

上午回顾:

​ JavaScript查找成员机

​ 原型链:就是由原型构成链状结构,作用:查找成员机制

​ 继承:ES6:extends

​ ES5:组合继承:构造函数和原型对象

​ 属性:调用父类的时候用call改变this指向

​ 方法:父实例对象赋值给子原型对象,再指回构造函数本身

类的本质

class本质还是function类的所有方法都定义在类的prototype属性上类创建的实例,里面也有__proto__ 指向类的prototype原型对象所以ES6的类它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。所以ES6的类其实就是语法糖.语法糖:语法糖就是一种便捷写法.   简单理解, 有两种方法可以实现同样的功能, 但是一种写法更加清晰、方便,那么这个方法就是语法糖
	class Star {}console.log( typeof Star );var obj = new Star();console.log(obj.__proto__);console.log(Star.prototype);
ES6:类class 类名 {// 构造函数constructor (uname, age) {this.uname = age;this.age = age;}// 方法say () {console.log('方法');}}// 实例化var obj = new 类型('姓名', 23);// 继承:class Father {}class Son extends Father {super调用父类里面的方法}ES5:
创建对象:字面量:var obj = {};构造函数:var obj = new Object();自定义构造函数:// 构造函数function Person (uname, age) {this.uname = uname; this.age = age;}// 原型对象Person.prototype.say = function () {方法}// 实例对象var obj = new Person('姓名', 21);注意:构造函数里面放属性,原型对象里面放方法原型对象:每个构造函数都有这个prototype,作用:共享方法,节省内存对象原型:每个对象都有__proto__,作用:指向原型对象(prototype)构造函数:construtor,作用:指回构造函数本身原型链:每个对象都有原型,原型对象也是对象,也有原型,一直串联起来作用:用来提供成员查找机制继承:组合继承:构造函数,原型对象属性:用call改变父类里面的this指向方法:父实例对象赋值给子原型对象,最后指回构造函数本身;

ES6 中的新增方法

ES6 中给我们新增了一些方法,可以很方便的操作数组或者字符串,这些方法主要包括:数组方法:字符串方法

数组方法:

迭代(遍历)方法:forEach()、map()、filter()、some()、every();这些方法都是遍历数组的forEach();遍历数组
filter();遍历筛选数组
some();遍历查找数组数组.方法名(function (当前项,当前项索引值,数组本身) {});

forEach()

array.forEach(function(currentValue, index, arr))currentValue:数组当前项的值
index:数组当前项的索引
arr:数组对象本身
var arr = ['red','blue','yellow','orange'];arr.forEach(function (elm,i,arrAbc) {console.log(elm,i,arrAbc);
});

filter()

array.filter(function(currentValue, index, arr))filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组
注意它直接返回一个新数组filter:筛选指定的满足条件的元素,组成新数组返回currentValue: 数组当前项的值index:数组当前项的索引arr:数组对象本身回调函数里面添加return添加返回条件
var arr = [100,66,99,123,333,33,44,66];var reArr = arr.filter(function (elm, a, n) {// console.log(elm,a, n);return elm % 2 == 0;});console.log(reArr);

some()

array.some(function(currentValue, index, arr)) 【注意:找到或者满足条件立刻停止】some() 方法用于检测数组中的元素是否满足指定条件. 通俗点查找数组中是否有满足条件的元素注意它返回值是布尔值, 如果查找到这个元素, 就返回true , 如果查找不到就返回false.如果找到第一个满足条件的元素,则终止循环. 不在继续查找.currentValue: 数组当前项的值index:数组当前项的索引arr:数组对象本身
var arr = [100,200,300,400];
var re = arr.some(function (elm,i,arr) {// console.log(elm,i,arr);console.log(i);return elm >= 200;});
console.log(re);

字符串方法:

**trim方法:**删除两边的空白符

var str = '      abcd ef gab cd ';
console.log( str );
console.log( str.trim() );// 获取元素var btn = document.getElementById('btn');var txt = document.getElementById('txt');// 添加事件btn.onclick = function () {// 写的内容if (txt.value.trim().length > 0) {alert('允许提交');} else {alert('不允许提交');}}

课程回顾:

原型链:由原型串联起来的链式结构,提供成员查找的机制

继承:组合继承(构造函数【属性】,原型对象【方法】)

​ 属性:调用父构造函数的时候,用call改变this的指向

​ 方法:父实例对象赋值给子原型对象,最后指回构造函数本身

​ 类的本质:函数,ES6语法糖

​ 新增方法:

数组方法:forEach,filter,some

​ 字符串方法:trim

) {

// console.log(elm,a, n);
return elm % 2 == 0;});console.log(reArr);

**some()**

array.some(function(currentValue, index, arr)) 【注意:找到或者满足条件立刻停止】

some() 方法用于检测数组中的元素是否满足指定条件. 通俗点查找数组中是否有满足条件的元素

注意它返回值是布尔值, 如果查找到这个元素, 就返回true , 如果查找不到就返回false.

如果找到第一个满足条件的元素,则终止循环. 不在继续查找.

currentValue: 数组当前项的值index:数组当前项的索引

arr:数组对象本身


var arr = [100,200,300,400];
var re = arr.some(function (elm,i,arr) {
// console.log(elm,i,arr);
console.log(i);
return elm >= 200;
});
console.log(re);

## 字符串方法:**trim方法:**删除两边的空白符

var str = ’ abcd ef gab cd ';
console.log( str );
console.log( str.trim() );

// 获取元素
var btn = document.getElementById(‘btn’);
var txt = document.getElementById(‘txt’);

	// 添加事件btn.onclick = function () {// 写的内容if (txt.value.trim().length > 0) {alert('允许提交');} else {alert('不允许提交');}}

课程回顾:​	**原型链**:由原型串联起来的链式结构,提供成员查找的机制​	**继承**:组合继承(构造函数【属性】,原型对象【方法】)​		属性:调用父构造函数的时候,用call改变this的指向​		方法:父实例对象赋值给子原型对象,最后指回构造函数本身​		类的本质:函数,ES6语法糖​	新增方法:​		**数组方法:forEach,filter,some**​		字符串方法:trim.

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

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

相关文章

为什么大学的计算机老师技术那么厉害,却不愿意当程序员?

不知道大家有多少是从事跟计算机有关的工作的&#xff0c;每次想到大学时的计算机考试&#xff0c;都能令小小编心惊胆战呀&#xff0c;各式代码和计算机语言&#xff0c;真的是很令人头痛了。不过呢&#xff0c;也有很多大神&#xff0c;大学学着其他的专业&#xff0c;却在毕…

DDG全家桶之3022

本篇文章主要根据360Netlab新出的DDG分析文档来复现新变种3022&#xff0c;会涉及部分分析和清除的方法&#xff0c;本篇文章只用于学习交流&#xff0c;为广大受害者提供清除思路 &#xff0c;请勿用于非法用途&#xff0c;产生一切后果与作者无关 详情请参考文档&#xff1a;…

js高级第四天

课程回顾&#xff1a; ​ 原型链&#xff1a;由原型构成链状结构&#xff0c;提供成员查找机制 ​ 继承&#xff1a;组合继承&#xff1a;构造函数和原型对象 ​ 属性&#xff1a;调用父构造函数的时候用call改变this指向 ​ 方法&#xff1a;父实例对象赋值给子原型对象&a…

d3.js 制作简单的俄罗斯方块

d3.js是一个不错的可视化框架&#xff0c;同时对于操作dom也是十分方便的。今天我们使用d3.js配合es6的类来制作一个童年小游戏--俄罗斯方块。话不多说先上图片。 1. js tetris类 由于方法拆分的比较细所以加上了一些备注&#xff08;这不是我的风格&#xff01;&#xff09; c…

Flask中路由系统以及蓝图的使用

一、Flask的路由系统 1.app.route()装饰器中的参数 methods:当前URL地址&#xff0c;允许访问的请求方式 app.route("/info", methods["GET", "POST"]) def student_info():stu_id int(request.args["id"])return f"Hello Old b…

js高级第五天

课程回顾&#xff1a; ​ 原型链&#xff1a;由原型构成链状结构&#xff0c;提供成员查找机制 ​ 继承&#xff1a;组合继承&#xff1a;构造函数和原型对象 ​ 属性&#xff1a;调用父构造函数的时候用call改变this指向 ​ 方法&#xff1a;父实例对象赋值给子原型对象&a…

d3.js 制作简单的贪吃蛇

d3.js是一个不错的可视化框架&#xff0c;同时对于操作dom也是十分方便的。今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇。话不多说先上图片。 1. js snaker类 class Snaker {constructor() {this._size 30;this._len 3;this._width 900;this._height 690;th…

js高级第六天

Q课程回顾&#xff1a; ​ 闭包&#xff1a;有权访问另外一个函数的局部变量的函数&#xff0c;作用&#xff1a;延伸变量使用范围 ​ mdn&#xff0c;w3c function fn1 () {var n 3;return function () {console.log(n);} }​ 递归&#xff1a;函数调用其本身 function f…

Chrome 75 lazy-loading

Chrome 75 & lazy-loading https://addyosmani.com/blog/lazy-loading/ https://chromestatus.com/feature/5645767347798016 Chrome 75 将默认启用延迟加载功能 自 Chrome 75 起&#xff0c;将原生支持图片的延迟加载&#xff0c;在代码中编写 <img loading"lazy&…

d3.js 实现烟花鲜果

今天在d3.js官网上看到了一个烟花的DEMO&#xff0c;是canvas制作的&#xff0c;于是我想用d3.js来实现它&#xff0c;js代码只有几行。好了废话不多说&#xff0c;先上图。 1 js 类 因为烟花要有下落的效果&#xff0c;所以里面用到了一些简单的数学和物理知识来模拟重力&…

阿里Sentinel控制台源码修改-对接Apollo规则持久化

改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则&#xff0c;对接后可以直接通过Apollo的后台进行规则的修改&#xff0c;推送到各个客户端实时生效。 但还有一个问题就是Sentinel控制台没有对接Apollo&#xff0c;Sentinel控制台本来就可以修改限流的规则&#xff0…

Python学习(一)

一、版本&#xff1a; Python2.X /Python3.x 官方宣布2020 年 1 月 1 日&#xff0c; 停止 Python 2 的更新。 Python3.x不兼容Python2.x  二、安装&#xff08;以mac 为例&#xff09; MAC 系统一般都自带有 Python2.x版本 的环境&#xff0c;你也可以在链接 https://www.py…

jQuery—淘宝精品服饰案例

<body><div class"wrapper"><ul id"left"><li><a href"#">女靴</a></li><li><a href"#">雪地靴</a></li><li><a href"#">冬裙</a>&l…

Python机器学习实践:决策树判别汽车金融违约用户

文章发布于公号【数智物语】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;关注公号不错过每一篇干货。 转自 | 法纳斯特&#xff08;公众号ID:walker398&#xff09; 作者 | 小F 决策树呈树形结构&#xff0c;是一种基本的回归和分类方法。 决策树模型的…

jQuery—tab栏切换

<div class"tab"><div class"tab_list"><ul><li class"current">商品介绍</li><li>规格与包装</li><li>售后保障</li><li>商品评价&#xff08;50000&#xff09;</li><l…

操作系统原理之I/O设备管理(第六章上半部分)

一、I/O系统的组成 I/O系统不仅包括各种I/O设备&#xff0c;还包括与设备相连的设备控制器&#xff0c;有些系统还配备了专⻔⽤ 于输⼊/输出控制的专⽤计算机&#xff0c;即通道。此外&#xff0c;I/O系统要通过总线与CPU、内存相连。 I/O系统的结构&#xff1a; I/O设备的分类…

操作系统原理之I/O设备管理(第六章下半部分)

五、I/O软件原理 输入输出软件的总体目标是将软件组织成一种层次结构 低层软件用来屏蔽硬件的具体细节高层软件则主要是为用户提供一个简洁、规范的界面设备管理的4个层次&#xff1a; 用户层软件 -》向系统发出I/O请求&#xff0c;显示I/O操作的结果&#xff0c;提供⽤户与设备…

切换Debug/Release编译模式和Archive的作用

&#xfeff;在学这个之前&#xff0c;以为很难&#xff0c;也起不到什么作用&#xff0c;但是等真正运用到工程里面&#xff0c;才发现&#xff0c;这个能帮你省下很多工作量。 1&#xff0c;Debug和Release版本区别&#xff1f; 进行iOS开发&#xff0c;在Xcode调试程序时&am…

AFNetworking 对数据进行https ssl加密

参考来源&#xff1a;http://www.cnblogs.com/jys509/p/5001566.html 现在在工作中的工作需求&#xff1a;https请求验证证书一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探其实这么做的话还是不够的 。…

数据库系统原理(第一章概述)

一、数据库基本概念 什么是数据&#xff1a;数据&#xff08;Data&#xff09;是描述事物的符号记录&#xff0c;是指利用物理符号记录下来的、 可以鉴别的信息。 数据是信息存在的一种形式&#xff0c;只有通过解释或处理的数据才能成为有用的信息。 什么是数据库&#xff1a;…