对象:
ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。
严格来说,这意味着对象是无特定顺序的值的数组。
类:
是对象的配方,设计图
实例:
实例就是对象自身
面向对象语言的要求
一种面向对象语言需要向开发者提供四种基本能力:
封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
聚集 - 把一个对象存储在另一个对象内的能力
继承 - 由另一个类(或多个类)得来类的属性和方法的能力
多态 - 编写能以多种方法运行的函数或方法的能力
对象的构成
在 ECMAScript 中,对象由特性(attribute)构成,特性可以是原始值,也可以是引用值。
如果特性存放的是函数,它将被看作对象的方法(method),否则该特性被看作对象的属性(property)。
ECMAScript中,都是采用晚绑定;
对象有三种:
本地对象:
Object
Function
Array
String
Boolean
Number
Date
RegExp
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
内置对象:
Global 和 Math
宿主对象:
所有非本地对象都是宿主对象(host object);所有 BOM 和 DOM 对象都是宿主对象。
作用域指的是变量的适用范围。
ECMAScript 只有公用作用域;
关键字 this 总是指向调用该方法的对象;
继承机制:
对象冒充:
构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。
因为构造函数只是一个函数,所以可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。
ClassB 就会收到 ClassA 的构造函数中定义的属性和方法。
还可以多重继承多个父类,真叼
原型链
一个原型对象是另一个类型的实例,层层递进;
prototype 对象的任何属性和方法都被传递给那个类的所有实例。
混合使用:
对象冒充的主要问题是必须使用构造函数方式,如果使用原型链,就无法使用带参数的构造函数了
最好方式是用构造函数定义属性,用原型定义方法。
ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。
严格来说,这意味着对象是无特定顺序的值的数组。
类:
是对象的配方,设计图
实例:
实例就是对象自身
面向对象语言的要求
一种面向对象语言需要向开发者提供四种基本能力:
封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
聚集 - 把一个对象存储在另一个对象内的能力
继承 - 由另一个类(或多个类)得来类的属性和方法的能力
多态 - 编写能以多种方法运行的函数或方法的能力
对象的构成
在 ECMAScript 中,对象由特性(attribute)构成,特性可以是原始值,也可以是引用值。
如果特性存放的是函数,它将被看作对象的方法(method),否则该特性被看作对象的属性(property)。
ECMAScript中,都是采用晚绑定;
对象有三种:
本地对象:
Object
Function
Array
String
Boolean
Number
Date
RegExp
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
内置对象:
Global 和 Math
宿主对象:
所有非本地对象都是宿主对象(host object);所有 BOM 和 DOM 对象都是宿主对象。
作用域指的是变量的适用范围。
ECMAScript 只有公用作用域;
关键字 this 总是指向调用该方法的对象;
继承机制:
对象冒充:
构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。
因为构造函数只是一个函数,所以可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。
ClassB 就会收到 ClassA 的构造函数中定义的属性和方法。
还可以多重继承多个父类,真叼
原型链
一个原型对象是另一个类型的实例,层层递进;
prototype 对象的任何属性和方法都被传递给那个类的所有实例。
混合使用:
对象冒充的主要问题是必须使用构造函数方式,如果使用原型链,就无法使用带参数的构造函数了
最好方式是用构造函数定义属性,用原型定义方法。
用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。
混合模式示例:
<script>
function ClassA(sColor) {
this.color = sColor;
}
ClassA.prototype.sayColor = function () {
alert(this.color);
};
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function () {
alert(this.name);
};
var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();
objB.sayColor();
objB.sayName();
</script>