NEW對象 NEW2017

0. 前言

</br>

2017年,又開始了新的一年,新的一年了,你是否依舊很驕傲的說自己是"單身狗",是不是在2016年12月31日那天,你的"單身狗",又漲了"一歲",哈哈,沒事啊,其實,我想告訴你們一個秘密,每個程序員都是"有對象的人",為什么這么說呢?那我今天就告訴你為什么。
對象.jpg

</br>

1. 簡介

</br>

面向過程
  • 自頂向下順序執行;
  • 其程序結構是按功能劃分為若干個基本模塊;
  • 各模塊之間的關系盡可能簡單,在功能上相對獨立;
  • 每一模塊內部均是由順序、選擇和循環三種基本結構組成;
  • 程序流程在寫程序時就已決定。
把大象裝進冰箱.jpg
趙本山、宋丹丹的小品《鐘點工》,有這么一個環節可謂是笑料百出:“把大象放進冰箱總共分幾步?答:“三步,第一步把冰箱門打開;第二步把大象放進去,第三步把冰箱門帶上”。而這,就是面向過程的思想。

</br>

面向對象
  • 把數據及對數據的操作方法放在一起,作為一個相互依存的整體——對象。
  • 對同類對象抽象出其共性,形成類。
  • 類中的大多數數據,只能用本類的方法進行處理。
  • 程序流程由用戶在使用中決定。
用面向對象的思想把大象關進冰箱.png
同樣,用面向對象的思想,把大象關進冰箱,就是你要知道,"誰"能把大象關進冰箱,"誰"有這個本事,你就讓"誰"去做這件事。

面向對象的思想:更符合人們思考習慣的問題,從執行者變成了指揮者

面向對象的特點
  1. 是一種符合人們思考習慣的思想
  1. 可以將復雜的事情簡單化
  2. 將程序員從執行者轉換成了指揮者
面向對象的四大特性
  • 封裝性
  • 繼承性
  • 多態性
  • 抽象性

</br>

2. 代碼實現

</br>

2.1 字面量方式創建對象(女朋友)并訪問屬性和方法
好了,可以去創建你的女朋友了。

對象:屬性方法的集合

創建對象(女朋友)
//1. 創建空對象
var obj1 = {};//(字面量方式)
console.log(obj1);//輸出 Object {}
console.log(typeof obj1);//輸出 object
var girlFriend = {
            //添加屬性
            name:"二雷",
            height:165,
            weight:55,
            age:25,

            //行為
            eat:function(){
                console.log("吃");
            },
            run:function(){
                console.log("跑");
            },

            //帶參數行為
            sleep:function(hours){
                console.log("睡覺" + hours + "個小時");
            },
            //
            say:function(hours){
                console.log("身高" + girlFriend.height);
                //在對象內部,this代表當前對象本身
                console.log("年齡" + this.age);
            },
        };
訪問對象(女朋友)的屬性與方法
//訪問對象的屬性(屬性值)
//對象名["屬性名"]
console.log(girlFriend["name"]);//輸出 二雷

//點語法訪問屬性
//對象名.屬性名
console.log(girlFriend.height);//輸出 165
修改對象(女朋友)的屬性
girlFriend.weight = 180;
console.log(girlFriend);//輸出 180
添加對象(女朋友)的屬性與方法
//添加屬性
girlFriend.faceValue = 100;
console.log(girlFriend);//輸出 100
//添加方法
girlFriend.play = function (){
    console.log("玩");
};
刪除對象(女朋友)屬性與行為
//刪除屬性
delete girlFriend.weight;
//因為刪了,所以沒有了
console.log(girlFriend);//輸出 Object {name: "二雷", height: 165, age: 25, faceValue: 100}
//刪除對象行為
delete girlFriend.eat;
因為刪除了找不到了。
girlFriend.eat()//輸出 報錯 

</br>

2.2 工廠模式創建對象(女朋友)并訪問屬性和方法
這回該有人說我想換一個類型的,一個對象嫌少,好,滿足你,批量生產。想創建幾個就創建幾個。

使用工廠模式可以快速、大量的創建擁有相同屬性和行為的對象

創建對象(女朋友)
function createGirlFriend(a){
    return {
        name:a,
        eat:function(){
            console.log("吃");
        }
    };
}
var girl1 = createGirlFriend("三雷");
var girl2 = createGirlFriend("四雷");
console.log(girl1);//輸出 Object {name: "三雷"}
console.log(girl2);//輸出 Object {name: "四雷"}
訪問對象(女朋友)的屬性與方法
//訪問屬性
console.log(girl1.name);//輸出 三雷
//訪問行為
girl1.eat();//輸出 吃
添加對象(女朋友)的屬性與方法
//添加屬性
girl1.age = 17;
console.log(girl1);//輸出 Object {name: "三雷", age: 17}
console.log(girl2);//輸出 Object {name: "三雷"}
//添加行為
girl1.eat = function(){
    console.log("eat");
};

倆個對象之間互不影響,所以girl1有age這個屬性,girl2沒有。

刪除對象(女朋友)屬性與行為
delete girl1.age;
//因為刪除了,所以沒有了。
console.log(girl1);//輸出 Object {name: "三雷"}
delete girl1.eat;
//以為刪除了,找不到了。
girl1.eat();//輸出 報錯

</br>

2.3 構建函數創建對象(女朋友)并訪問屬性和方法
  • 構造函數(就是函數,為了作區分,一般我們將構造函數的首字母大寫)
  • 構造函數----類(類型)
  • 構造函數聲明后不會被執行,僅僅是定義了一個用于這些屬性和方法的"類型",沒有任何的對象的實例產生
創建對象(女朋友)
function GirlFriend(name,age,height,weight){
            //屬性
            this.name = name;
            this.age = age;
            this.height = height;
            this.weight = weight;
            //行為
            this.eat = function(){
                console.log("吃");
            };
        }
NEW一個對象.png
NEW一個對象(女朋友)

var 對象名 = new 構造函數名(參數列表);
new 構造函數名(參數列表)
new都做了什么事情?

  1. 在堆區開辟出一片空間用來保存對象
  1. 將對象中對應的屬性進行賦值
  2. 返回對象的引用
var girl = new GirlFriend("缺電",20,150,180);
console.log(girl);//輸出 GirlFriend {name: "鐵錘妹妹", age: 20, height: 110, weight: 168}
訪問對象(女朋友)的屬性與方法
//訪問屬性
console.log(girl.name);//輸出 鐵錘妹妹
//訪問行為
girl.eat();//輸出 吃
添加對象(女朋友)的屬性與方法
//添加屬性
girl.faceValue = 100;
console.log(girl);//輸出 GirlFriend {name: "鐵錘妹妹", age: 20, height: 110, weight: 168, faceValue: 100}
//添加方法
girl.run = function(){
    console.log("跑");
}
刪除對象(女朋友)屬性與行為
delete girl.faceValue;
因為刪除了,所以沒有了。
console.log(girl);//輸出 GirlFriend {name: "鐵錘妹妹", age: 20, height: 110, weight: 168}
delete girl.run;
因為刪除了,所以找不到了。
girl.run();//輸出 報錯 

</br>

3. 總結

面向對象無法取代面向過程,它們是相輔相成的。面向對象是從宏觀上把握事物的,但在面向對象中具體實現某個細節時,也得采用面向過程的思想,面向對象是相對面向過程而言。
面向對象和面向過程都是一種思想:

面向過程

  1. 強調的是功能行為
  2. 關注的是解決問題需要哪些步驟

面向對象

  1. 將功能封裝進對象,強調具備了功能的對象
  2. 關注的是解決問題需要哪些對象

4. 結束語

說點正經的啊,引用一句大家都知道的話,葉的離開,是風的追求,還是樹的不挽留?如果你在生活中,遇到自己喜歡的,也喜歡你的,就在一起吧,雖然你已經學會了自己創建對象,但是也不是個事啊.....這個事就不說了。最后,求點贊,求分享。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 博客內容:什么是面向對象為什么要面向對象面向對象編程的特性和原則理解對象屬性創建對象繼承 什么是面向對象 面向對象...
    _Dot912閱讀 1,449評論 3 12
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 5:00,兒子準時按響了門鈴,我躡手躡腳打開門,想著偷偷給他一個驚喜! 讀初一的兒子,每天下午,背著書包回到家門口...
    銀鈺閱讀 389評論 7 2
  • You are no smart, so, Please put your focus in one thing,...
    QeshQA閱讀 517評論 0 1