JavaScript面向對象編程

很差的寫法
function CreatePerson(name,qq){//構造函數
    /* new構造函數的時候 系統會自動new一個Object對象,var this = new Object(); 最後再把這個new的this對象返回,return this; */

    this.name=name;//屬性name
    this.qq=qq;//屬性qq

    this.showName=function(){
        alert('個人名字叫:'+this.name);
    }

    this.showQQ=function(){
        alert('個人QQ號是:'+this.qq);
    }
}

var obj=new CreatePerson('user1','1234');
var obj2=new CreatePerson('user2','5678');
alert(obj.showName == obj2.showName);//false
/* 兩個new生成對象的showName是不一樣的 new的對象多了,內存佔用過多性能就會受影響了 */

好的寫法

function CreatePerson(name,qq){//構造函數
    this.name=name;//屬性name
    this.qq=qq;//屬性qq
}
CreatePerson.propotype.showName=function(){
    alert('個人名字叫:'+this.name);
}
CreatePerson.propotype.showQQ=function(){
    alert('個人QQ號是:'+this.qq);
}

var obj=new CreatePerson('user1','1234');
var obj2=new CreatePerson('user2','5678');
alert(obj.showName == obj2.showName);//true
/* 此時兩個obj的showName是相同的 */

面向對象編程:用構造函數加屬性(變量),用原型加方法(函數)。
同樣的放到原型中,不同的放到構造函數中。 由於name、qq是不肯定的,而顯示的方法時相同的。javascript

面向對象: 使用對象時, 只關注對象提供的功能, 不須要關注其內部的細節, 好比jQuerycss

css   javascript
class 一次給一組元素添加 原型
style 一次給一個元素添加 給對象加的一個方法

原型至關於css中的class, 給一組元素添加, 能夠繼承共用java


var arr = new Array();
對象
模子 產品(成品)
Array() arr
能夠 new Array() 不能夠 new arr()
Array是一個模子, 不具有實際功能,不能 Array.push() arr是一個產品,是拿來使用的,能夠 arr.push()
類有原型,能夠 Array.prototype 對象沒有原型,不能 arr.prototype
相關文章
相關標籤/搜索