js对象详解
使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象。
ECMAScript 拥有很多创建对象或类的方法。
1.工厂方式(函数返回对象)、
2.构造函数方式(函数中添加对象属性和方法)
3.原型方式prototype (相当于引用 其中的添加的属性和方法都是共享的 /无法修改和删除原型链属性或者方法)
4.混合的构造函数/原型方式
5.动态原型方法
目前使用最广泛的是混合的构造函数/原型方式。此外,动态原始方法也很流行,在功能上与构造函数/原型方式等价
4.混合的构造函数/原型方式
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); } Car.prototype.showColor = function() { document.write(this.color); }; var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25); oCar1.drivers.push("Bill"); document.write(oCar1.drivers); document.write("<br />") document.write(oCar2.drivers); /*** Mike,John,Bill Mike,John ***/
5.动态原型方法
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); //假的构造函数 if (typeof Car._initialized == "undefined") { Car.prototype.showColor = function() { alert(this.color); }; Car._initialized = true; } } var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25); oCar1.drivers.push("Bill"); document.write(oCar1.drivers); document.write("<br />") document.write(oCar2.drivers); /*** Mike,John,Bill Mike,John ***/
js没有像其他语言一样写类来实例化为对象 就是说没有类的概念。js构造出来的对象都是公有的没有私有, 但是可以制造类似的 比如 闭包函数(函数的函数) 可以当成私有方法 而函数中定义的变量(非对象属性)当成私有属性
//构造函数 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 //当对象被实例化后,构造函数会立即执行它所包含的任何代码 function myObject(msg){ //特权属性(公有属性) this.myMsg = msg; //只在被实例化后的实例中可调用 this.address = '上海'; //可以delete 只影响实例化的 //私有属性 var name = '豪情'; var age = 29; var that = this; //私有方法 function sayName(){ alert(that.name); } //特权方法(公有方法) //能被外部公开访问 //这个方法每次实例化都要重新构造而prototype是原型共享,所有实例化后,都共同引用同一个 this.sayAge = function(){ alert(name); //在公有方法中可以访问私有成员 }
// 可以删除delete 只影响实例化的
//私有和特权成员在函数的内部,在构造函数创建的每个实例中都会包含同样的私有和特权成员的副本, //因而实例越多占用的内存越多 } //公有方法 //适用于通过new关键字实例化的该对象的每个实例 //向prototype中添加成员将会把新方法添加到构造函数的底层中去 myObject.prototype.sayHello = function(){ alert('hello everyone!'); }
参考:http://www.w3school.com.cn/js/pro_js_object_defining.asp
浙公网安备 33010602011771号