《权威指南》笔记 -- 8.5 、8.6
来源:互联网 发布:哪里能找到工资数据 编辑:程序博客网 时间:2024/04/30 13:13
8.5 作为命名空间的函数
问题:js中无法声明一个代码块内可见的变量。
解决方法:简单定义一个函数用作临时的命名空间。
优点:函数内的变量,不会污染全局命名空间。
把8-3的代码根据自己记忆理解敲了一遍
<!-- extend()拓展函数 arguments - length : 2+ | - type : object 作用:将后面参数的属性,拓展到第一个参数中 --><!DOCTYPE html><html><head> <meta charset="utf-8"> <title></title></head><body> <script type="text/javascript"> var extend = (function(){ //如果能在{toString:null}遍历盗toString属性,说明没有这个bug //在ie中,与object中自带属性重名的属性,是无法被遍历的 for(var p in {toString:null}){ return function extend(o){ for(var i = 1; i < arguments.length;i++) { var source = arguments[i]; for(var prop in source) { o[prop] = source[prop]; } } return o; } } //下面是存在bug的情况 //Object.prototype上的属性不能被枚举 //在末尾将这些属性单独拿出来,一一遍历 return function patched_extend(o){ for(var i = 1; i<arguments.length ; i++) { var source = arguments[i]; for(var prop in source) { o[prop] = source[prop]; } for(var j=0;j<protoprops.length;j++) { var prop = protoprops[j]; o[prop] = source[prop]; } } return o; } var protoprops = ["toString","valueOf","constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString"]; }()); var a = {name:"qix"}, b = {age:12},c = {toString:"这是一个属性"}; extend(a,b,c); </script></body></html>
闭包
这里有篇关于闭包的文章,讲述清晰明了。
http://blog.rainy.im/2015/07/04/scope-chain-and-prototype-chain-in-js/
0 0
- 《权威指南》笔记 -- 8.5 、8.6
- mongodb权威指南笔记
- javascript 权威指南笔记
- armcm3权威指南笔记
- http权威指南笔记
- 《Javascript 权威指南》笔记
- Hadoop权威指南笔记
- HTTP权威指南 笔记
- javascript权威指南-笔记
- JavaScript权威指南笔记
- html权威指南笔记
- git权威指南 笔记
- MongoDB权威指南笔记
- CSS权威指南 笔记
- HTTP权威指南笔记
- 《JavaScript权威指南》笔记
- HTTP权威指南笔记
- 《css权威指南》笔记
- MySQL详解-------数据库备份和还原
- The import javax.servlet cannot be resolved
- C语言学习笔记:19_数组-字符数组与字符串(常用字符串函数)
- linux系统中ffmpeg安装配置步骤
- linux相关线程函数
- 《权威指南》笔记 -- 8.5 、8.6
- ok6410 uboot nandflash移植
- 有关JS截取字符串问题总结
- 利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序。win7会有UAC弹窗
- java 1.6.0_38-b05 vm 20.13-b02 GC优化手记
- Dubbo Demo
- 1...Numpy for Python Users
- block传值
- 接入图灵机器人实现XMPP