一、事件冒泡
1.介绍
事件冒泡值得是,内层元素和外层元素如果都对某个事件进行监听,那么改事件会一直向上抛出。
这样可以简化开发,比如说一个大的div中有好多小div,可以只对大div的事件进行监听。
2.停止事件冒泡
evt.stopPropagation();//firefox
evt.cancelBubble=true;
写法:
var evt =window.event||event;
if(evt.stopPropagation){
evt.stopPropagation();
}else{
evt.cancelBubble=true;
}
二、闭包
1、js函数定义与执行过程
step1:定义函数的时候js会将函数的scope chain设置为a所在的环境
step2:执行function时,函数会进入相应的excution context。
step3:在创建环境的过程中,首先会为a添加一个scope属性,他的值就是第一步中的scope chain
step4:执行环境会创建一个call object,并把活动对象添加到scope chain的顶端,并在call object中添加arguments属性、形参、内嵌函数和局部变量
2.上述理论的引用(如下代码)
首先定义a时a 的scope chain是window。执行时创建excution context,a的scope = scope chain。接着创建call object,并置于scope chain的顶端,在添加arguments 形参、内嵌函数、局部变量(ps:此时b被创建,并且chain scope是a的现在的scope chain)。当执行b的过程不再赘述,最终形成如下图所示的结构
ps:
当在函数b中访问一个变量的时候,搜索顺序
-
先搜索自身的活动对象,如果存在则返回,如果不存在将继续搜索函数a的活动对象,依次查找,直到找到为止。
-
如果函数b存在prototype原型对象,则在查找完自身的活动对象后先查找自身的原型对象,再继续查找。这就是Javascript中的变量查找机制。
-
如果整个作用域链上都无法找到,则返回undefined。
3.闭包的用处
闭包可以保证自己的公共方法的安全。
因为,一个函数会按照scope chain中call object的顺序寻找变量。这样如果将公共的js库定义成闭包,那么无论使用者定义的变量名字是什么都不会影响到公共库的代码,因为公共库的定义的变量所存放的call object对象必然在使用者定义的前面。
三、元素绑定事件
方法1:静态绑定
直接在html标签里写上事件
方法2;动态绑定
首先,获取相应的元素对象。然后,通过元素.事件名=function绑定
方法3:通过元素内置方法绑定
Firefox
addEventListener(“click”,handerfunction,false(常用false,因为事件由内向外传递))
第一个参数是事件,第二个是方法,第三个是事件传递顺序
RemoveEventListner移除事件
addEventListener方法的this指向元素对象
IE
attachEvent(“onclick”,handerfunction);第一个参数是事件名,第二个参数是函数
detachEvent();移除事件
上面两个函数的this指针指向window
四、对象动态添加属性和动态删除属性
1.delete t.go;动态删除属性 t是对象的引用名字,go是属性名字
2、添加直接用对象名.属性名=???就行了
五、js工厂模式
function createObject(){ var obj = new Object(); obj.uname="test"; obj.add=function(a,b){ alert(a+b) } return obj; }
六、匿名自调用函数
(function(){})()表示执行第一个小括号内的匿名函数对象
七、单例模式之饿汉式
var user={publicVar:'我就是单例', publicMethod:function(){ alert("换个概念你就不知道了!!!"); } };
方法二:(注意这里还模拟了java的封装)
var obj =(function(){ var privateVar="哈哈,js很有意思!!!"; function showPrivate(){ alert(privateVar) } return { publicVar:"test", showPrivate:showPrivate } })();
上面的代码使用了匿名自调用函数,并且使用闭包模拟了封装
八、单例模式之懒汉式
var lazyobj =(function(){ var privateVar="哈哈,js很有意思!!!"; function showPrivate(){ alert(privateVar) } function init(){ return { publicVar:"test", showPrivate:showPrivate } } var instance; // 获取到单例对象公共方法 function getInstance(){ if(!instance){ instance=init() } return instance; } return { getInstance:getInstance } })(); var obj1 = lazyobj.getInstance() ;
九、使用函数对象模拟继承
function User(uname,age){ this.uname = uname; this.age =age; } function Teacher(id,uname,age){ this.id = id; this.method123=User; this.method123(uname,age );//此时,是Teacher持有User方法,因此,user的this是指向teacher对象的 delete this.method; }
十、函数原型prototype
原理:构造器里面有一个__proto__ 执行函数对象里面的prototype占据的内存
使用原型模拟继承
function User(uname,age){ this.uname = uname; this.age =age; } function Teacher(id){ this.id=id; } Teacher.prototype=new User("test",123); var t1 = new Teacher(123456);
相关推荐
ArcGIS API For JavaScript 4.x 获取地图经纬度坐标(附完整代码,即开即用)
ArcGIS API for JavaScript 4.x 基础之绘制点、线、面、标注、图片的完整代码;
arcgis api for javascript 实现动态轨迹(巡查轨迹)
该资源包的执行效果查看地址:...“GIS之家”专栏中的“26.(arcgis api for js篇)arcgis api for js面修改面编辑(SketchViewModel)”。如下载有问题,可联系博主。 解压密码:arcgis
“pinyin4js是一个汉字转拼音的Javascript开源库”表明这是一个JavaScript库,它的主要功能是将汉字转换为对应的拼音表示。在网页应用或者JavaScript编程中,这样的库可以帮助开发者处理与汉字拼音相关的任务,比如...
4. **代码重构**:JSEditor支持JavaScript代码重构,包括重命名变量、提取函数等操作,这些操作对大型项目尤为重要,因为它们可以保持代码的整洁和一致性。 5. **调试工具**:除了编辑功能,JSEditor还集成了...
lua2js4cocos lua转换为cocos的javascript cocos2dx-lua到cocos2dx-js 将lua文件放入输入中运行lua2js.py脚本,该js文件将在输出中生成。
"JSEditor"就是这样一个专门为Eclipse设计的JavaScript开发插件,它旨在提供更高效、功能丰富的JavaScript代码编写环境。 JSEditor插件主要包含以下几个关键功能和特点: 1. **语法高亮**:JSEditor提供了对...
1、arcgis_js_v416_api 2、arcgis_js_v416_sdk 3、arcgis api for javascript 4.16 全套下载
arcgis api for js +echarts 实现点闪烁,包含调用的js文件
利用ArcGIS JavaScript API加载高德在线地图的扩展利用ArcGIS JavaScript API加载高德在线地图的扩展利用ArcGIS JavaScript API加载高德在线地图的扩展
首先,我们来看`jquery.js`,这是一个非常流行的JavaScript库,提供了丰富的DOM操作、事件处理、动画等功能,简化了JavaScript的开发。在这个项目中,jQuery被用来增强DOM元素的操作,例如动态加载和隐藏显示各级...
总的来说,jsEditor和jsEclipse都是Eclipse中不可或缺的JavaScript开发工具,它们通过丰富的特性和服务,帮助开发者提高生产力,降低出错概率,使JavaScript编程更加轻松愉快。无论你是新手还是经验丰富的开发者,都...
4. `three.js` - three.js库的文件,提供3D渲染和交互功能。 5. `models/` - 可能包含3D赛车模型和其他场景元素的文件,如`.gltf`或`.obj`格式。 6. `textures/` - 存放3D模型所需的纹理图像,如赛车的贴图、路面...
JavaScript(简称JS)是一种广泛用于前端开发的轻量级脚本语言,而C#则是一种面向对象的编程语言,常用于构建Windows桌面应用、游戏、服务端应用等。"js2c#"工具正是一个旨在帮助开发者将JavaScript代码转换为C#代码...
本代码使用ArcGIS API for JavaScript 3.20 版本 实现热力图,效果图https://blog.csdn.net/idomyway/article/details/80975940
js4 使用ES6 JavaScript编写CSS。 安装 npm install -g js4 # may require sudo 用法 用JS在文件中编写CSS,例如css.js : new Rule ( 'body' , { color : 'red' } ) ; new Rule ( '#id, .class > [attr]' , { '...
JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础...
JavaScript,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。JavaScript不是Java的子集,两者之间没有直接关联。JS起初名为LiveScript,但在...
applet 调用js 所需包 JSObject.getWindow(this).eval("javascript:alert(111)");