web前端开发中关于面向对象(四)

news/2024/6/29 11:49:53 标签: web前端开发, 面向对象, 继承
    原型继承存在的两个问题今天就来和大家学习一下。学习之前先再一次说一说原型继承存在的两个问题。
    1、无法在不影响所有实例的情况下,给要继承的构造函数传参
    2、继承的构造函数中的引用类型对于所有的实例是共享的
    那么,该如何解决这两个问题呢?解决这两个问题的方法也有两种。
    一、原型继承
    1、借用构造函数
function Person(father,mother){
    this.father=father;
    this.mother=mother;
}
Person.prototype.showInfo=function(){
    console.log(this.father+","+this.mother);
}
function Student(name,father,mother){
    this.name=name;
    Person.call(this,father,mother);
}
var stu=new Student("Sue","Mike","Anglo");
    由以上代码块可以清楚的看出,通过借用构造函数,就可以解决给要继承的构造函数传参且不影响其他的实例
    2、组合继承
function Person(father,mother){
    this.father=father;
    this.mother=mother;
}
Person.prototype.showInfo=function(){
    console.log(this.father+","+this.mother);
}
function Student(name,father,mother){
    this.name=name;
    Person.call(this,father,mother);
}
Student.prototype=new Person("Mike","Anglo");
Student.prototype.showInfo=function(){
    console.log(this.name);
}
var stu=new Student("Sue","Mike","Anglo");
    组合继承中,将Person.prototype也处于Student的原型链中,那么,Person构造函数中的属性和方法,Student自然也可以使用。该种继承方式较推荐使用。
    二、作用域
    作用域,按照字面的以上是作用的区域。而区域分为两种。
    1、全局作用域
    所有的全局作用域中的变量和函数都是window的属性,通过delete方法可以删除全局变量,但不能删除通过var、function声明的变量。全局作用域中的成员对所有函数都可见
    2、函数作用域
    函数作用域中的变量对外不可见,只能在函数内部使用
    例:
var a=1;
var fn=function(){var b=2;}
c=3;
delete c;//可删除,删除成功
delete a;//不可删除,删除失败
    三、预解析
    (1)若遇到同名的变量或函数,以函数为准,函数的优先级比变量高
    (2)全局作用域:所有的全局变量和函数声明都提前,变量提前仅仅是变量名提前,赋值不提前
    (3)函数作用域:所有局部变量和内部函数声明以及参数都提前
    四、闭包
    (1)什么是闭包?通俗的说,闭包是封闭的包裹,若用较为专业的术语,闭包也可以说的函数的嵌套
    (2)闭包是如何形成的?由闭包的含义就可以知道,闭包是由于函数的嵌套而形成的
    (3)闭包都包括哪些内容?闭包包扩,有一个函数,作用域(内层函数的外部作用域)
    关于以上所提到的知识或许不是很精准,但有些还是可以提供大家学习、了解,若各位觉得有出入的地方可以在下方留言,说说自己的了解和看法。

http://www.niftyadmin.cn/n/1202834.html

相关文章

js----script 的 defer属性 和 async 属性

参考 https://segmentfault.com/a/1190000006778717 defer && async 共同点 1.都用于改变处理脚本的行为2.这两个属性都会使script标签异步加载,然而执行的时机是不一样的 defer 推迟 1.脚本会被延迟到整个页面都解析完毕后再运行2.相当于告诉浏览器立即下载…

关于canvas

canvas是h5的标签,该标签定义图形,比如图表和其他图像。该标签是行级元素。标签只是图形容器,必须使用脚本来绘制图形。canvas标签是h5新增的标签,对于很多浏览器都具有兼容性,虽然具有兼容性,但通过canvas…

Webpack 4教程:为什么要优化代码

2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://wanago.io/2018/07/30/webpack-4-course-part-five-built-…

Node.js(一)

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 一、模块 1、核心模块:node.exe文件中已经编译好了的模块 2、文件模块:根据业务需求来编写的 .js文件 …

Node.js(二)

由Node.js(一)可以得知,通过fs中的readFile和writeFile可以复制一个文件,但若是进行大文件的拷贝,使用readFile和writeFile会出现内存溢出问题,那又该如何解决呢?为了能够进行大文件的复制&…

Egg 2.19.0 发布,阿里开源的企业级 Node.js 框架

开发四年只会写业务代码,分布式高并发都不会还做程序员? Egg 2.19.0 发布了,Egg 是阿里开源的企业级 Node.js 框架,为企业级框架和应用而生。团队的架构师和技术负责人可以非常容易地基于自身的技术架构在其基础上扩展出适合自身…

媒体查询--移动设备

随着技术的发展,时代的进步,智能手机已经成为了这个社会的最普遍的通讯设备。伴随着智能手机发展起来的移动端app也成为了这个时代的一个标志。身为一名IT行业人员,如今接触到的软件开发大多都已不再是PC端而是转向了移动端。移动端的出现方便…

chrome设置--disable-web-security解决跨域

我们可以通过使用chrome命令行启动参数来改变chrome浏览器的设置,具体的启动参数说明参考这篇介绍。https://code.google.com/p/xiaody/wiki/ChromiumCommandLineSwitches 这里介绍的是–disable-web-security参数。这个参数可以降低chrome浏览器的安全性&#xff…