• JavaScript面向对象:创建对象


    1.初级创建对象

        var oCar=new Object;
    	oCar.color='red';
    	oCar.door=4;
    	oCar.map=3;
    	oCar.showColor=function () {
    		// body...
    		alert(this.color);
    	}
    	console.log(oCar);
    缺点:需要创建多个Car实例

    2.工厂函数创建对象

       function showColor(){
    		alert(this.color)
    	}
    	function createCar(sColor,iDoors,iMpg) {
    		var oTempCar=new Object;
    		oTempCar.color=sColor;
    		oTempCar.door=iDoors;
    		oTempCar.mpg=iMpg;
    		oTempCar.showColor=showColor;
    		return oTempCar;
    	}
    	var oCar1=createCar('red',2,23);
    	oCar1.showColor();
    

     缺点:看起来不像是对象的方法

    3.构造函数创建对象

        function Car(sColors,iDoors,iMpg) {
    		// body...
    		this.color=sColors;
    		this.iDoors=iDoors;
    		this.iMpg=iMpg;
    		this.showColor=function(){
    			alert(this.color);
    		}
    	}
    
    	var oCar1=new Car('red',4,23);
    	var oCar2=new Car('blue',5,24)
    

     优点:内部不需要创建对象,this直接可以访问; 缺点:会重复生成函数

    4.原型方式创建对象

       function Car() {
    		// body...
    	}
    	Car.prototype.color='red';
    	Car.prototype.doors=4;
    	Car.prototype.mpg=23;
    	Car.prototype.drivers=['wang','xia'];
    	Car.prototype.showColor=function(){
    		alert(this.color);
    	}
    
    	var oCar1=new Car();
    	var oCar2=new Car();
    
    	oCar1.drivers.push('yun');
    
    	console.log(oCar2.drivers);
    

    缺点:没有参数,属性指向对象,对象共享,Car1修改,Car2也会跟着修改

    5.混合构造/原型方式

    
    
       function  Car(sColor,iDoor,iMpg) {
    		this.color=sColor;
    		this.doors=iDoor;
    		this.mpg=iMpg;
    		this.drivers=new Array("Mike","Sue");
    	}
    
    	Car.prototype.showColor=function(){
    		alert(this.color)
    	}
    
    	var oCar1=new Car('red',4,23);
    	var oCar2=new Car('blue',5,24);
    
    	oCar1.drivers.push('yun');
    	console.log(oCar1.drivers);
        console.log(oCar2.drivers);
    

    构造函数定义非函数属性;原型定义函数属性

    6.动态原型方式

    
    
       function Car(sColor,iDoor,iMpg){
    		this.color=sColor;
    		this.door=iDoor;
    		this.mpg=iMpg;
    		this.driver=new Array('Mike','Sue');
    
    		if(typeof Car._initialized=="undefined"){
    			Car.prototype.showColor=function(){
    				alert(this.color);
    			}
    		}
    
    		Car._initialized=true;
    	}
  • 相关阅读:
    栈及其在.NET FrameWork中的源码分析
    《高性能网站建设指南》读书笔记
    九宫格数独问题
    队列及其在.NET FrameWork中的源码分析
    《web标准之道》读后感(书评)
    SharePoint中的权限体系
    关于异步方法调用
    WF4.0 Beta2:关于动态保存和装载XAML工作流
    Lotus Symphony介绍及试用
    Node.js 0.8.18 / 0.9.7 发布
  • 原文地址:https://www.cnblogs.com/wangxiayun/p/8116733.html
Copyright © 2020-2023  润新知