JS复习:第二十二章
一、高级函数
1.在任何值上调用Object原声的toString( )方法,都会返回一个[object NativeConstructorName]格式d字符串。每个类在内部都有一个[[Class]]属性,这个属性中就指定了上述字符串中的构造函数名。举个例子吧:
alert(Object.prototype.toString.call(value));
由于原声数组的构造函数与全局作用域无关,因此使用toString( )就能保证返回一致的值。利用这一点,可以创建如下函数:
function isArray(value){
return Object.prototype.toString.call(value)=="[object Array]";
}
对于在IE中以COM对象形式实现的任何函数,isFunction( )都会返回false。
2.作用域安全构造函数
构造函数是一个使用new操作符调用的函数,但是如果不使用new操作符二十直接调用构造函数,函数内的this就会映射到全局对象上。解决这个问题的方法就是创建一个作用域安全的构造函数。
例如:
function Person(name,age,job){
if(this instanceof Person){
this.name=name;
this.age=age;
this.job=job;
} else {
return new Person(name,age,job);
}
}
var person1=Person("Nicholas",29,"Software Engineer");
alert(window.name) //""
alert(person1.name) //"Nicholas"
这段代码添加了一个检查并确保this对象是Person实例的if语句,它表示要么使用new操作符要么在现有的Person实例环境中调用构造函数。
多个程序员在同一个面上写javascript代码的环境中,作用域安全构造函数就很有用了。
3.惰性载入函数
惰性载入表示函数执行的分支仅会发生一次。有两种实现惰性载入的方法,第一种是在函数被调用时再处理函数。第二种是在声明函数时指定适当的函数。
4.函数绑定
函数绑定要创建一个函数,可以在特定的this环境中以指定参数调用另一个函数。该技巧常常和回调函数与事件处理程序一起使用,以便在将函数作为变量传递的同时保留代码执行环境。javascript库实现了一个可以将函数绑定到指定环境的函数:bind( )。
一个简单的bind( )函数接受一个函数和一个环境,并返回一个在给定环境中调用给定函数的函数,并且将所有参数原封不动传递过去。语法如下:
function bind(fn,context){
return function(){
return fn.apply(context,arguments);
};
}
只要是将某个函数指针以值得形式进行传递,同时该函数必须在特定环境中执行,被绑定函数的效用就凸显出来了。
5.函数柯里化
函数柯里化的基本方法和函数绑定是一样的:使用一个闭包返回要给函数。两者的区别在于,当函数被调用时,返回的函数还需要设置一些参数传入。
创建柯里化函数的通用方式:
function curry(fn){
var args = Array.prototype.slice.call(arguments,1);
return function(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return fn.apply(null,finalArgs);
};
}
二、防篡改对象
1.不可扩展对象
默认情况下,所有对象都是可以扩展的,任何时候都可以向对象中添加属性和方法。但是使用Object.preventExtensions( )方法可以改变这个行为,让你不能再给对象添加属性和方法。
2.密封的对象
密封对象不可扩展,而且已有成员的[[Configurable]]特性将被设置为false。这就意味着不能删除属性和方法,因为不能使用Object.defineProperty( )把数据属性修改为访问器属性,或者相反。要密封对象,可以使用Object.seal( )方法。
3.冻结的对象
最严格的防篡改级别是冻结对象。冻结对象既不可扩展又是密封的,而且对象数据属性的[Writable]特性会被设置为false。如果定义[[Set]]函数,访问器属性仍然是可写的。可以使用Object.freeze( )方法来冻结对象。
JS复习:第二十二章的更多相关文章
- 第二十二章 Django会话与表单验证
第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- “全栈2019”Java多线程第二十二章:饥饿线程(Starvation)详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第二十二章:try-with-resources语句详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java第二十二章:控制流程语句中的决策语句if-else
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- python 教程 第二十二章、 其它应用
第二十二章. 其它应用 1) Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...
- 第二十二章 跳出循环-shift参数左移-函数的使用 随堂笔记
第二十二章 跳出循环-shift参数左移-函数的使用 本节所讲内容: 22.1 跳出循环 22.2 Shift参数左移指令 22.3 函数的使用 22.4 实战-自动备份mysql数据库和nginx服 ...
- 20190925 On Java8 第二十二章 枚举
第二十二章 枚举 基本 enum 特性 创建 enum 时,编译器会为你生成一个相关的类,这个类继承自 Java.lang.Enum. valueOf() 是在 Enum 中定义的 static 方法 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...
随机推荐
- 伪 alter 弹窗 +弹窗统一
你应该有遇到这种情况:alert() 在手机上面显示的时候 反正是不好看 有的时候就只看到一个白色的框 看不到提示信息 反正很反人类 这时候我觉得 马上会有产品跟你说 这个要改掉. 然后我就遇 ...
- 启动web项目,报内存不足错误的解决方法
Initialization of bean failed; nested exception is java.lang.OutOfMemoryError: Java heap space 原因: 在 ...
- expressJS - 准备活动
安装 nodeJS 1. package.json 2. CommonJS, AMD, ES6 3. Babel
- Mysql 5.6 解压版配置方案
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-co ...
- MyEclipse 中文注释乱码
window-->preference-->general-->content type然后在<Content Types>中展开每一个子项,并在<Default ...
- Linux学习初步
centOS 6.5关闭防火墙步骤 关闭命令: service iptables stop 永久关闭防火墙:chkconfig iptables off两个命令同时运行,运行完成后 ...
- Defraggler(磁盘整理软件) V2.21.993 绿色版
软件名称: Defraggler(磁盘整理软件) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 5.0MB 图片预览: 软件简介: Defraggler ...
- [HMLY]1.CocoaPods详解----使用
作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 转载请注明出处 一.什么是cocoaPods 1.为 ...
- auDemo
Option Explicit Private Const MODULE_NAME = "auDemo.WSC" Dim oEccomOperation,dbDemo Set oE ...
- 深入了解css3新特性
深入了解css3新特性:http://www.ibm.com/developerworks/cn/web/1202_zhouxiang_css3/