/**
* 利用Object对象工厂创建javascript对象 我们还可以使用函数创建
* @param r
* @param g
* @param b
* @returns {___obj0}
*/
function getColorObject(r,g,b){
var obj=new Object() ;
obj._R_=r ;
obj._G_=g ;
obj._B_= b ; //用下划线只是程序员之间的私有约定
obj.showColor=function(){
document.write("Color:#"+r.toString(16)+g.toString(16)+b.toString(16)) ;
} ;
return obj ;
}
//这个和 工厂类似
var obj=getColorObject(255, 255, 255) ;
obj.showColor() ;
/**
* 利用函数实现对象因为 函数式Function对象 所以函数引用也有属性和方法
* javascript无静态方法 ...构造方法可以调用
* 利用function声明函数就是创建对象的过程
* 垃圾回收期机制和java类似
* 利用Object工厂和 function方式 完全一样 /// 利用原型模型要将 所有的.属性方法 加载到prototype 中去..引用的时候直接引用
*/
//在原型模型中 所有对象依赖于 ... 共享
//我们可以看到...这类似.java中的内部类 ...在内部属性内部的方法我们不可以使用this调用外部的数据,因为 它是内部属性..弱类型对象
//所以我们应该使用外部对象的名字来调用内部对象....已经解决了共享问题 原型方式创建的对象数据一致
function Car() {
}
Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.showColor = function() {
alert(this.color);
};
var oCar1 = new Car();
var oCar2 = new Car();
//oCar1.showColor() ;
//oCar2.showColor() ;
document.write(oCar1==oCar2 ) ; //不是一个对象但是 数据内容一致
document.write(oCar1.color==oCar2.color) ; //其实我们发现在 prototype原型中的所有元素 都一份共享内存。。他们的指针都相等. 只是外部的封装不同而已
//为了防止这个问题 ..我们可以使用带参数构造方法加上原型模式来完成..因为这样会为每个对象分配不同的实例
//document.write(typeof obj) ; //显示类型
//if(obj instanceof Object) {alert("object is the instance of Object");} //一个对象时一个对象shili
//动态增加在于对未实例化的对戏那个进行进行 prototype增加
Array.prototype.show=function(){ //没有prototype就不能动态增加
for(var i=0;i<this.length;i++){
document.write("i="+this[i]+"<br>");
}
} ;
var xxx=new Array(1,2,4,4,5,5) ;
xxx.show() ;