基础知识
1. 严格上讲,在JS中只有对象没有class
2. 对象可以有独有的属性和方法。即对象的属性和方法是类的超集。
3. ECMAScript可以识别两种类型的对象。
一种叫做Native Object,属于语言范畴;
一种叫做Host Object,由运行环境提供例如document对象,Dom Node等。
Native Object是一种松散的结构,可以动态的增加、删除、修改对象的属性(property)和方法(function)。属性有一个名字和一个值,属性值可以是另一个对象的引用
或者是内建的数据类型(String, Number, Boolean, Null 或者 Undefined) 。方法有方法和方法体。
可以直接给属性(方法)指定属性值(方法体),当对象中不存在此属性(方法)时,就创建此属性(方法)。
可以调用delete obj.a删除属性或者方法。
一,关于prototype
1. prototype属性对应一个对象,他是类级别的。通过ClassName.prototype进行访问。
2. 当创建一个类的对象时,这些对象共享类的prototype属性。
3. prototype属性指向一个对象,此对象的对应类可能也有prototype属性。所以可能形成prototype链。
4. 当定义一个类时,他的prototype存在默认值。
5. 读操作会读取在对象自己和prototype 链上发现的第一个同名属性值
写操作会为对象本身创建一个同名属性(如果这个属性名不存在)。
6. ClassA.prototype=A; ClassA.prototype=B;
那么B将取代A成为ClassA的prototype。
7. prototype属性指向的对象,可以包含属性和方法。prototype属性赋值的方法有
ClassA.prototype = objA; //直接指定对象
ClassA.prototype = { a:1, b:function(){} };
ClassA.prototype.a = 1; //设置 prototype属性指向对象的a属性。
ClassA.prototype.b = function(){}; // 设置 prototype属性指向对象的b方法。
说明:http://www.javaeye.com/topic/53537
二,关于创建对象
类定义有三种基本方法:
1. 工厂函数。例如
function CoFactory(){
var o = new Object;
o.a = 1 return o
}
用这种方式创建对象: var o = CoFactory();
2. 构造函数。例如
function Co(){
this.a = 1
}
用这种方式创建对象:var o = new Co()。
3. 构造函数+原型。例如
function Co(){
}
Co.prototype.a = 1;
用这种方式创建对象: var o = new Co();
类对象有静态属性和方法。可以通过ClassA.a进行访问。