1. 对象: 对象是由一组特性构成的一个封装体。Object = Property + Method
function Person(){
name:'abc',
age:23,
sayHello:function(){
alert("大家好!");
};
}
2. 对象的废除
通常我们在用完一个对象后,应该将其设置为null值,以此来保证对象的释放。
EXTJS
3. 对象的类型
(1) 本地对象
ECMA-262 "独立于宿主环境的ECMASCript提供的对象",简而言之:官方定义好的对象
如Object、Funtion 、Array、String、Boolean、Date、RegExp、Error、EvalError等
(2) 内置对象
可以认为它是一种特殊的本地对象,在ECMAScript程序执行时此对象就自动出现了,这意味
着我们不必明确实例化这些对象了. Math和Global
A. Math
属性: PI
方法: abs ceil floor pow(x,y) random round()
进价: 写一保留任意位小数的四舍五入函数
function mr(num,fix){
var x = 10;
for(var i=1;i<fix;i++){
x = x*10;
}
num = num*x;
num = Math.round(num);
num = num/x;
alert(num);
return num;
}
B. Global对象-----------影子对象
encodeURI() 把字符串编码为uri
eval() 计算js字符串,并把它作为脚本代码来执行
isNaN() 是否不是一个数字
parseFloat()
parseInt()
(3)宿主对象
官方没有定义,自己构建的对象, 再加上DOM对象和BOM对象 ---- 宿主就是所运行的哪个页面
4. JS对象类型的确定
typeof: 确定其基本类型---number、object、function、undefined
instanceof: 确定该对象是否属于某个具体的类型
typeof null -> object
typeof undefined -> undefined
typeof 数组 -> object
typeof 函数 -> function
5. JS自定义对象的创建方式.
(1) 工厂方式
function CarFactory(color,brand){
var car = new Object();
car.color = color;
car.brand = brand;
car.showColor = function(){
alert(this.color);
};
return car;
}
function testCar(){
var car1 = CarFactory('red','天给');
car1.showColor();
}
变体:
function Car(color,brand){
this.color = color;
this.brand = brand;
this.showColor = function(){
alert(this.color);
};
}
function testCar(){
var car1 = new Car('red','天给');
car1.showColor();
}
缺点: 在于每次调用showColor方法,都要创建一个新的函数,这意味着每个对象都有
自己的showColor版本,事实上,每个对象用的都是同一段代码,这样会造成内
存的浪费.
(2) 原型方式
function Car2(){}
Car2.prototype.color = "red";
Car2.prototype.brand = "MM";
Car2.prototype.showColor = function(){
alert(this.color);
};
function testCar(){
var car1 = new Car2();
car1.showColor();
}
缺点: 不能对对象进行个性化, 如果改变里面某一个对象引用类型属性的值,其它对象也就跟着改了.
(3) 混合方式
function Car3(color,brand){
this.color = color;
this.brand = brand;
}
Car3.prototype.showColor = function(){
alert(this.color);
};
6. 实现JS的继承
(1) 通过原型来实现继承
function Person(){
this.say = function(){
alert("这是基类中的方法");
};
}
function Teacher(){
}
//通过原型来建立继承关系
Teacher.prototype = new Person();
缺点: 不能为父类的属性动态的设置值
(2) 通过call方法来实现继承
function Person(name){
this.name = name;
this.say = function(){
alert("这是基类中的方法-"+this.name);
};
}
function Student(name){
//通过这句将父类和子类关联起来
Person.call(this,name);
}
(3) 通过apply方法来实现继承
function Person(name){
this.name = name;
this.say = function(){
alert("这是基类中的方法-"+this.name);
};
}
function Student(name){
//通过这句将父类和子类关联起来
Person.apply(this,new Array(name)); //要求传一个数组,而call要求传一个参数列表
}
2和3的一个最大的缺点: 不能继承基类用原型方式定义的方法.
(4) 混合方式实现继承
function Base(name){
this.name = name;
}
Base.prototype.say = function(){
alert("你好!我是"+this.name);
};
function Son(name){
//通过此种方式可以使用父类通过构造方法产生的属性
Base.call(this,name);
}
Son.prototype = new Base();
JSTree:
定义Node对象,----- 递归