JS高级程序设计笔记-对象基础
一、对象的类型
1、本地对象
(1)Object
(2)Function
(3)Array
* join()
* concat()
* slice()
* 模拟栈方法:push()+pop()
* 模拟队列方法:shift()+push()
* unshift():第一位添加
* reverse()
* sort()
* splice()
(4)String
(5)Boolean
(6)Number
(7)Date
(8)RegExp
(9)Error
(10)EvalError
(11)RangeError
(12)ReferenceError
(13)SyntaxError
(14)TypeError
(15)URIError
2、内置对象
(1)Global对象
拥有方法:
* encodeURI():处理完整的URI
* encodeURIComponent():处理URI的一个片段,对发现的所有非标准字符编码
* decodeURI()
* decodeURIComponent()
* eval()
属性:
undefined、NaN、Infinity、所有的本地对象
(2)Math对象
* Math.max()
* Math.min()
var arr = [2,3,5,8,10,50,23]; console.log(Math.max.apply(null,arr))//取数组中的最大值
* Math.abs():返回绝对值
* Math.ceil():向上舍入
* Math.floor():向下舍入
* Math.round():四舍五入
* Math.random():随机数
3、宿主对象
(1) BOM
(2)DOM
二、作用域
三、定义类或对象
1、工厂模式:函数内定义以及返回一个对象。
// 工厂模式 function showColor(){ console.log(this.color) } function Factory(scolor){ var obj = new Object(); obj.color = scolor; obj.showColor = showColor; return obj; } var obj1 = Factory('red'); obj1.showColor();
2、构造函数方式:构造函数内部没有创建对象,使用this关键字。
3、原型方式:实例的属性指向的是对象时,被多个实例共享。
4、混合构造函数原型方式:用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。
// 构造函数原型方式 function Car(sdoors,stype){ this.doors = sdoors; this.type = stype; this.drivers = ['a','b'] } Car.prototype.showDoor = function(){ console.log(this.doors); } var obj2 = new Car(1,'trunk'); var obj3 = new Car(2,'car'); obj2.drivers.push('c'); obj2.showDoor(); console.log(obj2.drivers); console.log(obj3.drivers);
5、动态原型方式:与混合构造函数原型方式的区别在于,赋予对象方法的位置,动态原型方式将公用方法定义在构造函数内部;但需要一个标志(flag),判断如果flag未定义那么创建方法,并将flag赋值true;这样就可以实现创建的函数仅仅被创建并赋值一次。
// 动态原型方法 function Car(sdoors,stype){ this.doors = sdoors; this.type = stype; this.drivers = ['a','b']; if(typeof Car.flag == 'undefined'){ Car.prototype.showDoor = function(){ console.log(this.doors); } Car.flag = true; } } var obj2 = new Car(1,'trunk'); var obj3 = new Car(2,'car'); obj2.drivers.push('c'); obj2.showDoor(); console.log(obj2.drivers); console.log(obj3.drivers);
6、实例
四、修改对象
1、创建新方法
2、重新定义已有方法
1 Function.prototype.originString = Function.prototype.toString;//保存原始方法的指针 2 Function.prototype.toString = function(){ 3 if(this.originString().length>10){ 4 return "Function too long to display!" 5 }else{ 6 return this.originString(); 7 } 8 }; 9 function fun1(){ 10 alert('test'); 11 } 12 console.log(fun1.toString()); //Function too long to display!