2015-10-21 晚上
1.调用call方法能够改变函数运行的作用域,例如:
function sayColor() {
alert(this.color);
}
var color = 'window color';
var box = { color : 'box color' };
这时程序员直接调用sayColor则弹窗中值为window color,若是想在弹窗中提示对象中的color属性可以使用call方法:
sayColor.call(box); //box color
call中的参数代表sayColor函数执行的作用域:
sayColor.call(this); //window全局作用域
sayColor.call(window); //window全局作用域
因此,call被设计出来的目的是为了灵活改变函数执行的作用域。
2.定义对象可以用如下方式:
var myClass = {
sName : 'XXX'
sAge : 23
};
需要注意对象属性的声明语句后不能加分号!
3.编写函数时注意函数的形参列表中不能使用var关键字!
4.创建对象有两种方式推荐使用:
构造函数和原型的结合
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array('Mike', 'John');
}
Car.prototype.showColor = function() {
alert(this.color);
}
动态原型方法
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array('Mike', 'John');
if(typeof Car._initialized == 'undefined') {
Car.prototype.showColor = function() {
alert(this.color);
}
Car._initialized = true;
}
}
对象实例化
var car = new Car('red', 4, 25);
2015-10-22 上午
5.转义字符用反斜杠\。
6.函数体中的arguments是对象,其属性length的值为参数个数,可以使用数组方式取得每个参数。
7.string类型不是对象,即不是引用类型,但是其包装类String是引用类型。
8.ECMAScript中为函数传递参数只有按值传递,而没有按引用传递。若传递一个引用类型,则传递的是该类型(对象)的地址,该方式是值传递。
9.值类型可以用typeof检测,引用类型既可以用typeof又可以用instanceof来检测具体的对象类型。
10.变量对象的概念。全局变量属于window对象的属性,局部变量也属于某个对象,此对象是由解析器处理的。
11.一个变量通过传参、var定义的方式都是函数的局部变量,否则是全局变量。
12.ECMAScript没有块级作用域,即{ ... }内不会形成一个内部作用域。
13.给不再使用的对象赋值为null可以解除引用,垃圾回收器会释放没有引用的内存空间,从而提高页面的性能。
2015-10-22 下午
14.ECMAScript中其实有两大内置对象:Global和Math,window对象是Global对象的一部分,Global对象不能显式调用,是一个抽象概念。
15.同为将字符串编码为utf-8,encodeURI不能识别特殊字符,encodeURIComponent能够识别,解码为decodeURI和decodeURIComponent。
16.如何取得一个范围内的随机数:
function select(start, end) {
var total = end - start + 1;
return Math.floor(Math.random()*total+start);
}
alert(select(6, 9));
17.在内置对象Math中,向上取整、向下取整和四舍五入取整函数分别为ceil、floor、round。
2015-10-22 晚上
18.ECMAScript中的对象都有原型属性prototype,实际是一个__proto__指针存储的。prototype中存储的属性和方法的使用与普通属性和方法一样,其在不同的对象中都相同,类似于Java中的静态属性和方法。
19.判断原型
xxx.prototype.isPrototypeOf(XXX); //判断对象xxx是否指向原型对象XXX
xxx.hasOwnProperty('xxxx'); //对象中是否有xxxx实例属性
xxxx in xxx; //xxxx是否是xxx的实例属性或原型属性