JavaScript 高级程序设计 读书笔记
2014-03-11 10:19
302 查看
var div = document.getElementById("div1");
仅供本人使用,没有很大的阅读价值
2014年2月15日21:52:46
通常javaScript放在head标签之间, 这样的话, 会在所有的javaScript代码都加载完毕之后才开始显示页面, 也就是造成显示的延迟, 这样有两个办法,可以解决, 并且这两个方法等效:
①在<Script>的属性, 设置defer="defer"
②把Script代码写在body之内
2014年2月24日20:44:56
一个变量声明但是没有初始化, 那么它的值自动获得undefined. 使用typeof()函数检测传入的参数时, 对于undefined 类型,得到的是undefined返回值. 而对于赋初值为null的变量, 得到的是object返回值, 也就是说, null 指的是对象指针, 它本身是一个对象. 而奇怪的是 undefined == null 返回的true , 这是需要值得注意的地方.
5
2014年2月25日10:45:55
在《JavaScript高级程序设计》,第二版,30页中, 说对于定义没有赋值的变量、和赋值为null变量, 它们没有toString()方法, 所以最好用String()方法来返回给定对象的值.
而在后文中说, Object的每个实例都有toString()方法, 我的疑问是难道null 和undefined类型的变量不是Object吗, 这里显得很诡异. 后来看到, 所有引用类型的值都是Object的实例.
var c = " 2"; var d = 20; var e; alert(e.toString());//忽略 alert(d.toString());//有显示这里说明,他们确实没有这个方法.
2014年2月25日18:56:18
在javaScript当中创建对象和添加属性的方式很灵活
var person = new Object(); person.ownName = "special"; alert(person.ownName);//将显示special
2014年2月25日19:54:45
监测数据类型时, typeof 是一个很强有力的工具, 但是对于赋初值为null的变量和object类型的变量, 返回的都将是object.
那么可以使用instanceof操作符, 使用方法, result = variable instanceof constructor. 如果是 比如: alert(person instanceof Object);可以检测是不是Object变量.
用typeof检测函数的时候会返回function, safari和Chrome 检测正则表达式的时候会也会返回"function".
2014年2月26日10:46:42
创建对象的方式
var person = new Object(); person.name = "Lyle"; person.age = 20;
var person = { name : "Lyle", age : 20 };
2014年2月26日12:01:13
在章节,5.2.2中,有一段代码很有意思.
var colors = new Array("red","blue"); colors.push("brown"); colors[3] = "black"; alert(colors.length);//输出4那么, 如果我直接,
colors[5] = "pink";会怎么样.
当然, 都是undefined.
实验代码是:
var colors = ["red","blue"]; colors.push("green"); colors[6] = "pink"; for(var i=0; i<colors.length;++i) { document.write("<p>"+colors[i]+"</p>"); document.write("<br />"); };
2014年2月26日16:14:17
写正则表达式的方式有两种 ,
var p = / [bc]at/ i; var p = new RegExp("[bc]at","i");定义函数有两种方式,
function sum(a,b) { return a+b; } var sum = function(a,b) { return a+b; }
2014年2月26日16:42:43
没有重载的概念, 后面定义的同名函数会覆盖前面定义的同名函数.
2014年2月26日21:00:38
原型模式, 据说, 没定义一个方法,在javaScript当中就会有一个对象, 假如在构造函数中定义了一个属于这个类型(构造函数)的方法(展示叫做show()), 那么,每次调用这个构造方法创建对象的时候. 不同的实例中的show()是不一样的. 那么意思就是说, 每个实例的show()功能都是一样的,但是却用的是不同的对象. 多么浪费啊.
解决的办法就是原型模式, 把成员属性和方法都加到构造函数的prototype里面就可以了, 这里需要理解的就是,其实prototype其实也是一个对象.
原型模式的代码:
function Person(){ } Person.prototype.name = "Lyle"; Person.prototype.age = 20; Person.prototype.job = "software engineer"; Person.prototype.sayName = function() { alert(this.name); }; var person1 = new Person(); person1.sayName(); var person2 = new Person(); person2.sayName();
简化模式的带代码
function Person {} Person.prototype = { name : "Lyle", age : 20, job : "software engineer", sayName : function (){ alert(this.name); }; };
2014年2月27日13:17:36
//一般情况下, 都是构造函数模式和原型模式的组合 function Person(name ,age, job) { this.name = name; this.age = age; this.job = job; this.friends = ["shelby","Court"]; } Person.prototype = { constructor : Person , sayName : function() { alert(this.name); } }
2014年2月27日13:29:30
我有一个问题不明白, 那就是书里面说寄生构造函数模式 和 稳妥构造函数模式, 的严正区别. 寄生模式,返回的是一个Object对象, 和构造函数原型没有什么区别.
打算先不管这些, 然后那些继承也先不管
2014年2月27日15:28:07
arguments.callee 是指向正在执行函数的指针. 在递归中用它来调用函数是再好不过的选择了.
2014年2月28日11:37:23
获得窗口大小以及窗口位置的方式
var text = "the width of this window is "; text +=window.screen.width; text +="<br /> the height of this window is "; text +=window.screen.height; text +="<br />the screenleft is "; text +=window.screenX; text +="<br />the screenTop is "; text +=window.screenY; document.write(text);
2014年2月28日16:23:14
打开新窗口
window.open("http://www.baidu.com","newWindow","height=400,width=400,top=10,left=20,resizable=yes");
2014年2月28日19:46:23
/*位置操作,立即打开新的URL,这里指的是本地url*/ /*location.assign("http://www.baidu.com"); *window.location("http://www.baidu.com" * / location.href="http://www.baidu.com";//
2014年3月2日15:14:38
在html中,利用<script language="javascript" type="text/javascript" src="./script.js"></script>引入的两个js是不可以相互调用的
2014年3月2日15:35:43
<div id="div1"> <ul style="background-color: saddlebrown; text-align: left"> <li>生活是一种无奈</li> <li>生活是不知所措</li> <li>生活充满了挑战</li> <li>生活意味你还活着</li> </ul> </div>
在这里,对于
var div = document.getElementById("div1");
返回的div中, div的childNodes 中有三个字节点,如果写成
<div id="div1"><ul style="background-color: saddlebrown; text-align: left"> <li>生活是一种无奈</li> <li>生活是不知所措</li> <li>生活充满了挑战</li> <li>生活意味你还活着</li> </ul></div>则,只有一个子节点.
代码如下
var div = document.getElementById("div1"); var arrayOfNodes = Array.prototype.slice.call(div.childNodes,0); document.write(arrayOfNodes+"<br />"); for(var i=0; i<arrayOfNodes.length; ++i) { var a = arrayOfNodes[i]; document.write(">>>"+a.nodeName+" "+ a.nodeType+" "+a.nodeValue+"<br />"); }
输出
[object Text],[object HTMLUListElement],[object Text]
>>>#text 3
>>>UL 1 null
>>>#text 3
相关文章推荐
- javascript高级程序设计第四章:变量、作用域和内存问题读书笔记
- JavaScript高级程序设计 读书笔记之九 本地对象Array
- javascript高级程序设计 读书笔记2
- JavaScript高级程序设计(第3版)第七章读书笔记
- JavaScript高级程序设计 读书笔记
- javascript高级程序设计第六章:面向对象的程序设计——继承读书笔记
- [置顶] Javascript高级程序设计 读书笔记(三)
- javascript高级程序设计读书笔记----面向对象的程序设计
- javascript高级程序设计第五章:引用类型读书笔记
- 读书笔记 JavaScript 高级程序设计(第三版)-- 第1章
- Javascript高级程序设计 读书笔记四
- JavaScript高级程序设计(一~五章)——读书笔记
- 读书笔记 JavaScript高级程序设计 第三章 基本概念-数据类型
- Javascript 高级程序设计读书笔记
- javascript高级程序设计-----------------读书笔记
- JavaScript高级程序设计(读书笔记)之BOM
- JavaScript高级程序设计(第3版)第二章读书笔记
- JavaScript高级程序设计 读书笔记之八 Function类及闭包
- JavaScript高级程序设计--读书笔记
- 读书笔记 JavaScript 高级程序设计(第三版)-- 第2章