<html> <head> <script> /* 5.动态原型法 */ function DCar(name,price){ this.name=name; this.price=price; if(DCar.initial='undefined'){ DCar.prototype.displayC=function(){alert(this.name+"----"+this.price)}; } DCar.initial=true; } var c1=new DCar('bmw','30'); c1.displayC(); for(var prop in c1){ alert(prop+"----"+c1[prop]);//方法也会显示出来 } // 4. 混合的构造函数/原型方式(推荐) /* 联合使用构造函数和原型方式,就可像使用其他程序设计语言一样创建对象,这种概念非常简单, 即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。 */ function hCar(sColor){ this.color = sColor; this.drivers = new Array('Mike','Sue'); } hCar.prototype.showColor = function(){ alert(this.color); } /* var hcar1 = new hCar('y color'); var hcar2 = new hCar('r color'); hcar1.drivers.push('Matt'); alert(hcar1.drivers); // output "Mike,Sue,Matt" alert(hcar2.drivers); // output "Mike,Sue" */ /** *3.使用原型的方式 如何在构造方法中传参数?? */ function CarClass(){ } CarClass.prototype.name=""; CarClass.prototype.price=""; CarClass.prototype.displayCar=function(){ alert(this.name+'---'+this.price); } /* var c1=new CarClass(); c1.name="bmw"; c1.price="30"; c1.displayCar(); var c2=new CarClass(); c2.displayCar(); */ /** *2.构造方法模式 1).使用this来定义对象的属性和方法 2).定义方法时直接使用function(){},而不写方法名 3).使用var 定义一个变量。 */ function Car(name,price){ this.name=name; this.price=price; this.displayCar=function(){ var a=this.name+"--"+this.price; alert(a); } } /* var c1=new Car("bmw","red"); c1.displayCar(); var c2=new Car("QQ","yellow");c2.displayCar(); delete c1.price; c1.displayCar(); alert(c1.name+"--"+c2["name"]); //用[]属性名称时必须加引号 */ /* 1.工厂方法模式 */ function generateCar(){ var car=new Object(); car.name="bmw"; //这里写成car.dispalyName(){}是不可以的 car.dispalyName=function(){ alert(this.name); };//注意这个分号不可以少 return car;//注意return 不可以省略,省了之后没有对象返回 } /* var carBmw1=generateCar(); carBmw1.dispalyName(); //bmw var carBmw2=generateCar(); carBmw2.name="QQ"; carBmw1.dispalyName(); //bmw carBmw2.dispalyName(); //qq */ </script> <title> js创建对象的几种方式 </title> <body> <script> </script> </body> </html>