对象:
ECIMA-262 把对象(object) 定义为"属性(变量)的无序集合, 每个属性存放一个原始值、对象或函数"。严格来说,
这意味着对象是无特定顺序的值的数组。
尽管EOIAScript如此定义对象,但它更通用的定义是基于代码的名词(人、地点或事物)的表示。
类:
每个对象都由类定义,可以把类看做对象的配方。类不仅要定义对象的接口(interface) (开发者访问的属性和方法),
还要定义对象的内部工作(使属性和方法发挥作用的代码)。编译器和解释程序都根据类的说明构建对象。
实例:
程序使用类创建对象时,生成的对象叫作"类的实例(instance)"。对类生成的对象的个数的唯限制来自于运行代码的
机器的物理内存。每个实例的行为相同,但实例处理组独立的数据。 由类创建对象实例的过程叫做实例化(instantiation)
js中所有内容都是对象:一种为普通对象;一种为实例对象(用new生成的对象为实例对象,写new的过程叫做实例化)
面向对象特点
封装:把相关的信息(无论数据或方法)存储在对象中的能力
聚集:把一个对象存储在另一个对象内的能力
继承:由另一个类(或多个类)得来类的属性和方法的能力
多态:编写能以多种方法运行的函数或方法的能力
作用域:
公用域指的是变量的适用范围。
公用、私有和受保护作用域
传统定义:
主要关注于公用和私有作用域。公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实
而私有作用域中的属性只能在对象内部访问,即对于外部世界来说,这些属性并不存在
受保护作用域也是用于定义私有的属性和方法,只是这些属性和方法还能被其子类访问。
ECMAScript只有公用作用域:
ECMAScript中只存在一种作用域-公用作用域。ECMAScript 中的所有对象的所有属性和方法都是公用的
this的作用:
在ECMAScript中,要掌握的最重要的概念之一是关键字this的用法,它用在对象的方法中。关键字this总是指向
调用该方法的对象
构造函数方式:
创建函数就像创建工厂函数一样容易,第一步是选择类名,即构造函数的名字
实例:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.shoncolor = function () {
alert(this.color);
};
}
var oCarl = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
构造函数在java中类名相同的函数
功能:初始化对象必备函数,作用也是初始化函数
区分当前函数是构造函数还是普通函数取决于是否有this(构造有)
调用区别:构造函数调用数必须用new创建新对象,普通函数直接调用
实例:
<script>
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showcolor = function () {
alert(this.color);
alert(this.doors);
alert(this.mpg)
};
}
var oCarl = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
oCarl.showcolor();
</script>
<script>
function student(iname, iclass, iage, inum) {
this.name = iname;
this.class = iclass;
this.age = iage;
this.num = inum;
this.xin = function () {
var arr = [
this.name,
this.class,
this.age,
this.num
]
alert(arr)
}
}
var oname1 = new student("张三", 20, "3班");
var oname2 = new student("李四", 19, "2班");
oname1.xin();
oname2.xin();
</script>