一、高级函数

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复习:第二十二章的更多相关文章

  1. 第二十二章 Django会话与表单验证

    第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...

  2. 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记

    第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...

  3. Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  4. “全栈2019”Java多线程第二十二章:饥饿线程(Starvation)详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  5. “全栈2019”Java异常第二十二章:try-with-resources语句详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  6. “全栈2019”Java第二十二章:控制流程语句中的决策语句if-else

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. python 教程 第二十二章、 其它应用

    第二十二章. 其它应用 1)    Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...

  8. 第二十二章 跳出循环-shift参数左移-函数的使用 随堂笔记

    第二十二章 跳出循环-shift参数左移-函数的使用 本节所讲内容: 22.1 跳出循环 22.2 Shift参数左移指令 22.3 函数的使用 22.4 实战-自动备份mysql数据库和nginx服 ...

  9. 20190925 On Java8 第二十二章 枚举

    第二十二章 枚举 基本 enum 特性 创建 enum 时,编译器会为你生成一个相关的类,这个类继承自 Java.lang.Enum. valueOf() 是在 Enum 中定义的 static 方法 ...

  10. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...

随机推荐

  1. jmeter连接数据库

    新建一个 Thread Group: 新增 JDBC Connection Configuration: 点击新增的 JDBC Connection Configuration ,需要修改的参数包括: ...

  2. createElement、createTextNode、setAttribute使用方法

    createElement() 方法可创建元素节点. 示例:var placeholder = document.createElement("img"); createTextN ...

  3. java zip 批量打包(java.util包和apache.tools包)

    /** * 文件批量打包 * @param zipPath 打包路径 * @param files 批量文件 */ public void zipOut(String zipPath,File[] f ...

  4. 转:Spark User Defined Aggregate Function (UDAF) using Java

    Sometimes the aggregate functions provided by Spark are not adequate, so Spark has a provision of ac ...

  5. java操作mongodb——更新数据

    Java中可以通过updateOne,updateMany,replaceOne方法进行集合的文档更新.但是 _id 是不能更新的 updateOne只会更新一条数据,即使通过Filters.lt(& ...

  6. FTP上传下载工具(FlashFXP) v5.5.0 中文版

    软件名称: FTP上传下载工具(FlashFXP) 软件语言: 简体中文 授权方式: 免费试用 运行环境: Win 32位/64位 软件大小: 7.4MB 图片预览: 软件简介: FlashFXP 是 ...

  7. CSS3之3D效果中的transform运用

    css3中添加了很多新的标签 属性 描述 css transform 向元素应用 2D 或 3D 转换. 3 transform-origin 允许你改变被转换元素的位置. 3 transform-s ...

  8. Jenkins配置和使用

    之前整理了Jenkins的下载和安装过程,有需要的可以参考我的博客,地址:   http://www.cnblogs.com/luchangyou/p/5981884.html 接下来整理一下Jenk ...

  9. Winform DataGridView直接导出Excel

    /// <summary> /// 导出excel /// </summary> /// <param name="fileName">导出文件 ...

  10. Android如何查看应用签名信息

    转自http://www.trinea.cn/android/android-view-signatures/comment-page-1/ 介绍Android如何查看自己的应用签名及三方APK或系统 ...