js基础知识:闭包,事件处理,原型
闭包:其实就是js代码在执行的时候会创建变量对象的一个作用域链,标识符解析的时候会沿着作用域链一级一级的网上搜索,最后到达全局变量停止。所以某个函数可以访问外层的局部变量和全局变量,但是访问不了里层的变量
with和catch语句都会在作用域的前端添加一个变量对象
function buildUrl(){
var qs = "?debug=true"
with(location){
var url = href + qs ;
}
return url
}
如果一个函数对象要访问内层函数中的变量的话,就用return就行了
事件处理:事件先捕获然后再冒泡,从document开始在document结束,addEventListener中第三个参数为true时,在捕获阶段处理事件,为false是在冒泡阶段处理事件,默认为false
ie有自己的attachEvent方法,与addEventListener不同的是,事件名中多了‘on’,而且没有第三个参数,只支持冒泡
原型:
function Person(name) {
this.name = name;
}
var person1 = new Person('Mick');
每一个创建的函数都有原型属性,它是一个指针,指向函数的原型对象。
每个函数的实例都有一个构造函数的指针,指向原函数对象
console.log(person1.constructor == Person); //true
原型对象其实也相当于一个实例,所以他的构造函数也指向原函数对象
console.log(person1.constructor==Person.prototype.constructor)//true
每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性
继承就是让sub的原型指向另一个函数对象(super的实例),从而而这个原型对象的constructor属性指向的是函数对象super
原型对象本来就是可以让实例对象共享其中的方法,所以,这个时候sub就可以访问到super实例和super的原型对象中的方法了
function Super() {
this.sayHi = ()=>{
alert('hi')
}
}
function Sub(){
this.say = ()=>{
alert('im sub')
}
}
Sub.prototype = new Super()
var sub1 = new Sub() ;
console.log(sub1.__proto__.constructor==Super)//true
console.log(sub1.__proto__.__proto__==Super.prototype)//true
js基础知识:闭包,事件处理,原型的更多相关文章
- Node.js基础知识
Node.js入门 Node.js Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- HTML+CSS+JS基础知识
HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...
- 网站开发进阶(十五)JS基础知识充电站
JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- JS基础学习——闭包
JS基础学习--闭包 什么是闭包 闭包的定义如下,它的意思是闭包使得函数可以记住和访问它的词法范围,即使函数是在它声明的词法范围外执行.更简单来讲,函数为了自己能够正确执行,它对自己的词法范围产生闭包 ...
- JS基础知识笔记
2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...
- js基础知识温习:Javascript中如何模拟私有方法
本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...
- JS基础知识总结
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划() ...
- js基础知识总结(2016.11.1)
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
随机推荐
- PAT甲题题解-1025. PAT Ranking (25)-排序
排序,求整体的排名和局部的排名整体排序,for循环一遍同时存储整体目前的排名和所在局部的排名即可 #include <iostream> #include <cstdio> # ...
- 《Linux内核设计与实现》Chapter 2 读书笔记
<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...
- mac下mongoDB的使用
第一步: 我们在网上找到mongoDB的安装文件包,下载下来然后放在mac系统的指定位置,如图所示: 第二步:打开数据库服务端 我们在bin目录下执行mongod这个命令: 首先cd到bin目录 然后 ...
- Hyper-V下WINXP无网卡问题解决
- [转帖]kubeadm 实现细节
kubeadm 实现细节 http://docs.kubernetes.org.cn/829.html 1 核心设计原则 2 常量和众所周知的值和路径 3 kubeadm init 工作流程内部设计 ...
- Redis的相关问题总结
一.Redis的优缺点及适用场景 Redis 是一个基于内存的高性能key-value数据库.很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘 ...
- Java == ,equals 和 hashcode 的区别和联系(阿里面试)
今天阿里的人问我 equals 与hashcode的区别,我答不上来, 仔细查了一下,做了总结: (1) == 这是Java 比较内存地址,就是内存中的对象: java中的==是比较两个对象在JVM中 ...
- 用node编写cli工具
cli是command-line interface的缩写,即命令行工具,常用的vue-cli, create-react-app, express-generator 等都是cli工具. 本文以自己 ...
- Ubutnu linux 下升级python版本,以2.x升级到3.x为例
Linux操作系统一般 都会自带python,但是python版本会比主流低,故升级python, 主要思路:自带的python的链接link文件是在/usr/bin 下,采用sudo apt-get ...
- JS频率控制函数
/** * 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次 * @param {Function} fn 需要调用的函数 * @param {Number} delay 延迟时间 ...