前言:感觉这本书只有第二章 第三章有点看头

基本类型和引用类型

  • 基本类型:字符串 数字 布尔值 null(待确定) undifined
  • 引用类型:对象 数组
引用传递 保存的只是对象的地址
var obj = {};
var obj1 = obj;
obj.name="hey";
obj.name === obj1.name
自修改对象
var items = [1,2,3];
var items1 = items;
items.push(4);
items.length === items1.length
更改对象的引用
//将items设置为字符串数组(对象)
var items = ["one","two","three"];
var items1 = items;
items = ["new","array"];
//现在items items1指向不同的对象
//items指向 new array
//items1指向 one two three
修改对象生成一个全新对象而非自修改对象

var item="test";

var itemstr = item;
items+='ing';
console.log(item!=itemstr)

作用域

var foo = 'test';
if (true) {
var foo = 'new test';
}
console.log(foo === 'new test'); function test() {
var foo = 'old test';
}
test();
console.log(foo === 'new test');
function test() {
foo = 'test';
}
test();
console.log(window.foo === 'test');

上下文

function setFoo(fooInput) {
this.foo = fooInput
} var foo = 5;
console.log('foo at the window level is set to'+foo);
var obj = {
foo:10
}
console.log('foo at the obj is set to'+obj.foo) setFoo(15);
console.log('now foo at the window level is set to'+foo);
obj.setFoo = setFoo;
obj.setFoo(20);
console.log('foo at the obj is now set to'+foo)
更改函数上下文

function changeColor(color) {
this.style.color = color;
}
changeColor("white");
window对象没有style对象 var main = document.createElement('div');
changeColor.call(main,"black");
console.log(main.style.color) function setBodyColor() {
changeColor.apply(document.body,arguments); } setBodyColor('black');

闭包

var obj = document.getElementById("main");
obj.style.border = '1px solid red';
setTimeout(function() {
obj.style.display="none"
},1000) function delayedAlert(msg,time) {
setTimeout(function({
console.log(msg)
),time)
}
柯里化
function addGenerator(num) {
return function(toAdd) {
num+toAdd
}
} var addFive = addGenerato(5);
console.log(addFive(4)==9)
ID为main的元素
var obj = document.getElementById("main");
要绑定的数组
var items = ['click','keypress'];
迭代数组中的每一项
for (var i =0;i<items.length;i++) {
利用自执行的匿名函数生成作用域
(function() {
记住这一作用域中的值
在该作用域中每个items的值都是唯一的,不依赖父上下文中所创建的变量
var item = items[i];
为元素绑定时间 obj['on'+item] = function() {
item指向处于for循环上下文的父变量
console.log('thanks for your' +item)
}
}) ()
}

函数重载



function sendMessage(msg,obj) {
if(arguments.length=2) {
obj.log(msg)
}else{
console.log(msg)
}
}

修改对象

如今javascript有三种方式控制某个对象能否修改,我们将按照严格程度从最低到最高一次讲解

  1. Object.preventExtensions()

    阻止新的属性添加到对象中,当前的属性可以照用不误
创建一个新对象
var obj = {};
使用preventExtensions创建一个新对象
var obj2 = Object.preventExtensions(obj)
报错
Object.defineProperty(obj2,'greeting',{value:'hello'})
  1. Object.seal()

    使用Object.seal()能够限制对象的能力,这类似Object.preventExtensions

    不过和之前的例子不同的是属性不能删除,也不能转换成存取器(accessor,getter方法)

    删除或添加属性同样会报错,已有的可写属性是例外
var obj={};
obj.greeting = 'welcome';
Object,seal(obj);
更新已有的可写属性
无法将已有属性转换为存储器
obj.greeting = 'hello'
Object.defineProperty(obj,'greeting',{get:function() {
return 'hello world'
}) 无法删除属性
delete.obj.greeting;
  1. Object.freeze()

    三种方法中最为严格的方法,一旦使用对象就被默认为不可改变的了。无法再添加删除更新属性。如果本身是一个对象的话,那该对象可以更新称为浅冻结。想生成一个不可改变的对象,所有值是对象的属性必须要冻结
var obj = {
greeting:'welcome';
innerObj:{}
} Object.freeze(obj)
报错
obj.greeting = 'hello';
innerObj可更新
obj.innerObj.greeting="hello" 无法将已有属性转换为存取器
Object.defineProperty(obj,'greeting',{get:function(} {
return 'hello world'
}) 试图删除属性
delete.obj.greeting
冻结内部对象
Object.freeze(obj.innerObj)
报错
obj.innerObj.greeting = 'dfsfsf';

精通JavaScipt第二版笔记——特性、函数和对象的更多相关文章

  1. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  2. C++标准库第二版笔记 2.1

    C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...

  3. C++标准库第二版笔记 3 和异常的理解 1

    C++标准库第二版笔记 3 和异常的理解 1 差错和异常(error and exception)的处理 标准异常类(exception class) 定义于 分为: 1.语言本身支持的异常 2.标准 ...

  4. 《LabVIEW 虚拟仪器程序设计从入门到精通(第二版)》一1.3 小结

    本节书摘来自异步社区<LabVIEW 虚拟仪器程序设计从入门到精通(第二版)>一书中的第1章,第1.3节,作者 林静 , 林振宇 , 郑福仁,更多章节内容可以访问云栖社区"异步社 ...

  5. C++标准库第二版笔记 2

    C++标准库第二版笔记 2 微小但重要的语法提升 template表达式内的空格: vector< list<int> >; // OK in each C++ version ...

  6. C++标准库第二版笔记 1

    C++标准库第二版笔记 1 C++ std历史 第一份标准化文档: C++98 & C++03 & TR1 TR1 Information Technology- Programmin ...

  7. Oracle12c从入门到精通(第二版) PDF 下载

    一:下载地址: 二:本书图样 三本书目录 前言 第一章 Oracle数据库概述 第二章 Oracle在Windows 8上的安装与配置 第三章 SQL基础 第四章 Oracle PL/SQL及编程 第 ...

  8. Backbone.js入门教程第二版笔记(1)

    1.模块 集合 视图 和事件的一个综合例子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  9. Head Html Css 第二版笔记

    一. 引用 <blockquote>ago aog aogag </blockquote> 则是引用一大段文字并独立显示 二. <a> 创建目的地 <h2&g ...

随机推荐

  1. 关于dom脚本编程的一些优秀理念总结

    1.平稳退化(优雅降级) 目的:当浏览器不支持js或者js被用户禁用时,做到即使不运行js,网页的可读性亦不会受到太大的影响. 理念:使用最新的技术面向高级浏览器构建最强的功能及用户体验,然后针对低级 ...

  2. linux下fdisk分区管理、文件系统管理、挂载文件系统等

    分区管理工具有:fdisk, parted, sfdisk fdisk:对于一块硬盘来讲,最多只能管理15分区: # fdisk -l [-u] [device...]  查看硬盘设备分区信息 # f ...

  3. 更新jar包里的配置文件

    更新jar包里的配置文件 起因 从笔记本传了个jar到服务器,运行的时候才发现配置文件一个ip项填错了.本来很简单的问题,maven重新打包就可以了,但是30多M的jar包就因为一个配置项错了又要重新 ...

  4. hdu4171 Paper Route 树的性质+DFS

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4171 题意: 有n+1个点,这n+1个点由n条边相连,且保证连通.然后给出各个点到出口的距离,要求从 ...

  5. 关于SVN工具的配置及使用

    一.在Ubuntu下的配置 1.检测svn是否已经安装过 使用命rpm -qa | grep subversion,如果是一下结果,说明系统已经安装过svn了 如果什么都没有输出,则说明没有安装过sv ...

  6. 如何在Eclipse下查看JDK源代码

    设置: 1.点 "窗口"-> "首选项" -> "Java" -> "已安装的JRE" 2.此时&qu ...

  7. CountDownLacth详解

    一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CounDownLatch.由于调用了countDown() 方法,所以在当前计数到达零之 ...

  8. selenium+python环境的搭建的自动化测试

    一.安装python: 我安装的是2.7.13版本的:可以在CMD下 运行python命令查看是否安装python,以及安装版本: 在https://www.python.org/getit/这个地址 ...

  9. 3、J2EE学习推荐书籍

    3.J2EE学习推荐书籍       J2EE的学习应该循序渐进,一本好书会很快上手和深入.在学习J2EE之前,应该学好SQL,基本上,程序设计都会跟数据库打交道.如果SQL没学好,就如同房子没有基脚 ...

  10. 9.Java 加解密技术系列之 RSA

    Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项 ...