JavaScript面向對象①

  • 什麼是對象

  對象是一個總體,對外提供一些操做編程

  • 什麼是面向對象

  使用對象時,只關注對象提供的功能,不關注其內部細節;好比jQuery函數

  • 面向對象編程(OOP)的特色(本身理解的特色:把書本上多態放在類繼承裏
  1. 封裝
  2. 繼承:從已有的對象上,繼承出新的對象
  • 多重繼承
  • 多態
  • 對象的組成
  1. 方法---函數:過程、動態的
  2. 屬性---變量:狀態、靜態的
arr=[1,2,3,4,5]

//arr是一個對象

arr.length;//屬性

arr.push(6);//方法
//變量跟屬性本是同一個東西
//var a=12;//變量:自由
//arr.a = 5;//屬性:屬於一個對象

 

//函數
function show(){
  
}
//方法:屬於一個對象的
arr.fn=function(){

}
  • 簡單解釋一下this指向
//針對array
var arr=[12,23,45];
arr.show=function(){
    //this:是當前的方法,屬於誰  
    alert(this)//arr
}
//針對object
var obj = new Object();
obj.aaa=12;
obj.show=function(){
    alert(this.aaa)//12  
}
obj.show();
  • 工廠模式構造對象
//其實這個函數就是建立一個對象(用工廠方式構造對象)
//用工廠方式構造對象
//好聽點就是:構造函數
function  create(name,sex){
    var obj = new Object();
    //屬性
    obj.name=name;
    obj.sex=sex;
    //方法
    obj.showName=function(){
        alert(this.name)//111
    }
    obj.showSex=function(){
        alert(this.sex)//
    }
    return obj;
}
var p1=create("111","男');
p1.showName();   
p1.showSex();     
  • 缺點
  1. 沒有new
  2. 浪費資源---每一個對象都有本身的function
  • 解決缺點
//this:當前方法,屬於誰;
//可是函數前面有new的話,this就會失效;
function  create(name,sex){
    //屬性
    //var this = newObject();//假想系統幫咱們處理了建立對象
    this.name=name;
    this.sex=sex;
    //方法
    this.showName=function(){
        alert(this.name)//111
    }
    this.showSex=function(){
        alert(this.sex)//
    }
    //return this;//假想系統幫咱們處理了return
}
var p1=new create("111","男');
p1.showName();   
p1.showSex();   
//記住一句話裏面有new,外面就不須要new;外面有new,裏面就不須要new;

  
  • 以上解決了new那怎麼解決浪費資源呢?看下面
//首先區別一下類,對象(實例)
var arr = new Array();
Array.prototype.sum=function(){
    //在Arry這個類上均可以使用sum()
}
//arr對象:真正有功能的東西,是被類構造出來的
//Array類:不具有實際的功能,只能用來構造對象
//因此我理解的就是構造函數就是類,類就是構造函數---只針對js
function  Create(name,sex){
    //屬性
    this.name=name;
    this.sex=sex;
}
//Create就是類,也是構造函數
Create.prototype.showName=function(){
     alert(this.name)//111
}
Create.prototype.showSex=function(){
     alert(this.sex)//
}
//記住一句話相同的加在原型裏,不一樣加在構造函數裏
var p1=new create("111","男');
p1.showName();   
p1.showSex();   
//混合模式
  • 以上就是優化後的代碼---每一個人理解不同只要你本身明白就行
相關文章
相關標籤/搜索