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的规划():避 ...
随机推荐
- 关于几个vcenter的合并心得!
由于最近公司领导觉得公司几个vcenter管理的不同网段IP,办公的时候操作不方便,故本人把几个vcenter上面的esxi主机合并到一个里面! 通过几次测试,发现最简单的方法就是直接用一台vcent ...
- linux 操作 mysql 指定端口登录 以及启动 停止
linux 操作 mysql 指定端口登录 mysql -uroot -p -h10.154.0.43 -P3341 1.查看mysql版本方法一:status;方法二:select version( ...
- centos7 设置静态IP
centos7 设置静态IP 一.查找配置文件(/etc/sysconfig/network-scripts) [root@bogon network-scripts]# ll 总用量 232 -rw ...
- NS2安装过程中环境变量设置的问题(ns-2.35)
nam: Can't find a usable tk.tcl in the following directories: */ns-allinone-2.35/tcl8.5.10/library/t ...
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...
- 实训五(Cocos2dx-3.x 打包apk再理解)
问题说明:Unable to resolve target 'android-10' SDK版本与Cocos项目默认的版本不相符 如果只是执行 cocos compile -p android 只是执 ...
- 第三周作业:Visual Studio 2013
在装Visual Studio 2013的时候,提示我升级我的电脑,不然不给安装,于是我就各种升级,完事之后有了这个: 在我耐心的等待之下终于等到安装完成: 我就建立一个新的项目: 我就写了一个简单程 ...
- R-CNN阅读笔记
论文地址:<Rich feature hierarchies for accurate object detection and semantic segmentation> 论文包含两个 ...
- UML实践详细经典教程
面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...
- 学习Spring Boot:(十)使用hibernate validation完成数据后端校验
前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...