当前位置: 代码迷 >> Web前端 >> 犀牛读书笔记(一)
  详细解决方案

犀牛读书笔记(一)

热度:96   发布时间:2012-11-04 10:42:41.0
犀牛读书笔记(1)
1. Javascript中的对象
对象是一种复合数据类型,将多个数据值集中在一个单元中,而且允许使用名字来存储这些值。另一种解释,对象是一个无序的属性集合,每个属性都有自己的名字和值,存储在对象中的已命名的值既可以是数字和字符串,也可以是对象。


2. 创建空对象
var o = new Object();//使用构造函数创建空对象
var o = {};//使用对象直接量创建空对象


3. 遍历对象的属性
Function DisplayPropertyNames(obj){
var names = “”;
for (var name in obj)
names += name+”\n”;
alert(names);
}.


4. 删除对象的属性
Delete person.name
如果读取一个不存在(就是还没有被赋值的属性)的值,得到undefined
删除掉的属性则不是把对象的属性设置成undefined,而是从对象中真正移除了属性。
For/in循环可以枚举出已经被设为undefined的属性,但不列出被删除的属性。


5. 构造函数
构造函数是具有两个特性的函数:一、由new运算符调用。二、传递给它的是一个对新创建的空对象的引用,将该引用作为关键字this的值,而且还要对新创建的对象进行适当的初始化。
Function Rectangle(w,h){
this.width=w;
this.height=h;
}
var rect = new Rectangel(1,2);//把指向rect的this传递给构造函数,初始化?
构造函数只是初始化了由this传递进来的对象,并不返回对象


6.方法
方法就是通过对象调用javascript函数。
函数就是数值,他们所使用的名字没有任何特殊之处,可以将函数赋给任何变量,值赋给一个对象的任何属性。
任何一个函数都会得到一个额外的实际参数,既调用该函数的对象。
在方法体内部,关键字this的值就变成了调用该方法的对象。
函数是存储在变量中的值,而那个变量也不过是全局对象的一个属性,当调用一个函数时,实际上调用的事全局对象的一个方法。在这样的函数中,关键字this引用的是全局对象。
用构造函数定义方法
function Rectangle(w,h){
this.width=w;
this.height=h;
this.area =function(){
return this.width*this.height;
}
}
用构造函数定义方法的缺点:对所有的属性都进行了设置,其中方法属性是常量,所以每个对象的方法属性都是相同的,由于每个属性都占用一定的空间,所以占用的内存会增加。解决方法是用对象的原型属性。


7、原型对象和继承
每个对象都有原型对象,原型对象的所有属性是以它为原型的对象的属性。一个对象的原型是由创建并初始化该对象的构造函数定义的。Javascript中的所有函数都有prototype属性,他引用了一个对象,虽然原型对象初始化时是空的,但是你定义在其中的任何属性都会被该构造函数所创建的所有对象继承。
对象的读写不对称:读取对象o的属性p时,javascript首先检查o是否具有一个名为p的属性,如果o没有这个属性,javascript会再检查o的原型是否具有这个属性,这样才使得以原型为基础的继承机制起作用。当写一个属性的值的时候,javascirpt并不使用原型对象。因为当一个对象o还没属性p的时候,设置p的值会改变原型对象p的值,这样会改变了整个对象类的p的值,而不仅仅是改变了自己想要改变的属性值。


8、面向对象的javascript
定义类Cricle
Function Circle(radius){
this.r=radius;//定义实例属性并初始化
}
//类属性
Circle.PI = 3.1415;
//实例方法
Circle.prototype.area = function Circle_area(){ return Circle.PI*this.r*this.r}/
//类方法
Circle.max = function(a,b){
If(a.r>b.r)  return a;
else return b;
}



9、超类和子类
在javascritp中,类object是最通用的类,是其他所有内部类的超类。所有类都继承了Object类的基本方法。
对象从它们构造函数的原型对象中继承属性,又从Object对象中继承属性。
原型对象本身就是一个对象,它是由构造函数Object()创建的。这就意味着原型对象继承了Object.protype属性。而Complex对象就继承了Complex.prototype对象的属性,而后者又继承了Object.prototype属性。
Function MoreComplex(real,imaginary){
this.x =real;
this.y=imaginary;
}
MoreComplex.protytype = new Complex(0,0);
//给子类添加新方法或特性
MoreComplex.prototype.swap = function(){
Var  tmp = this.x;
this.x = this.y;
this.y = tmp;
}
//由于此时MoreComplex的Constructor 指向超类的constructor,所以必须明确地设置constructor属性
MoreComplex.prototype.constructor = MoreComplex;


10、对象的属性和方法
Javascript中所有的对象都由类Object继承而来,以下是Object定义的属性和方法。
Constructor属性:每个对象都有Constructor属性,它引用的是用来初始化该对象的构造函数。
toString()方法:没有任何实际参数,返回一个字符串,该字符串代表了调用它的对象的类型或值。该方法的目的是让每个对象类都有自己特定的字符串表示,当你定义一个类时,就应该为他定义一个toString()方法,以便能将这个类的实例转化成有意义的字符串。当一个函数被转换成字符串时,获得该函数的源代码。
Valueof(), toLocaleString() , hasOwnProperty() , propertyIsEnumerable() , isPrototypeOf()