JavaScript - 面向?qū)ο缶幊桃?/h1>

開篇廢話是一種情懷

在我們開始學(xué)習(xí)面向?qū)ο笾拔衷担紫鹊孟认胍粋€(gè)問題,那就是何為對(duì)象则吟?

  • 在日常生活中我們有男朋友\女朋友槐臀,稱之為對(duì)象。有了男朋友可以為你遮風(fēng)擋雨氓仲,有了女朋友可以為你洗衣做飯水慨,同理,在我們的二進(jìn)制編程世界里敬扛,對(duì)象完全可以理解為工具或者工具包晰洒,當(dāng)然,在某種特定情況下啥箭,我們也可以把人比作是工具谍珊。
  • 面向?qū)ο缶幊唐鋵?shí)是一種思想、思維的轉(zhuǎn)變急侥,從面向過程轉(zhuǎn)變成面呈對(duì)象砌滞。面向過程注重的是過程侮邀,而面向?qū)ο笞⒅氐氖墙Y(jié)果,兩者的目的相同贝润,但是實(shí)現(xiàn)方式卻不盡相同绊茧。
  • 據(jù)說,面向?qū)ο笏季S最早是一個(gè)生物學(xué)家提出來的题暖,他說:"我們編寫的代碼就好比生物的每一個(gè)細(xì)胞按傅,我們的身體的每一個(gè)組件都代表一個(gè)工具捉超,手供我們吃飯胧卤,腿供我們行走,不管那天手不能用了拼岳,但它不會(huì)影響腳的行走枝誊,如果能把每一類型的代碼抽取成一個(gè)一個(gè)的工具,好比惜纸,鉗子叶撒、鑷子、錘子耐版,那我們對(duì)代碼祠够、對(duì)工具的管理就會(huì)顯得非常方便,只需要將這一類工具放到一個(gè)工具包里面即可粪牲」湃浚”
  • 天了嚕,廢話不多說了腺阳,好像開篇廢點(diǎn)話落君,是一種習(xí)慣!下面就讓我們開始認(rèn)識(shí)面向?qū)ο缶幊獭?/li>
  • 學(xué)習(xí)面向?qū)ο笾巴ひ孟劝严旅孢@些東西搞明白绎速!

Js語言的回顧

  • 三個(gè)組成部分

    • BOM:全稱Browser Object Model 瀏覽器對(duì)象模型,核心對(duì)象(window loacation)焙蚓;
    • DOM:Document Object Model 文檔對(duì)象模型纹冤,DOM樹,本身為我們操作頁面元素提供了一套方法(API)购公,API:application programming interface 應(yīng)用程序編程接口
    • ECMAScript:規(guī)定js的核心語法萌京,js語句,關(guān)鍵字君丁,保留字
  • 數(shù)據(jù)類型

    • 基本數(shù)據(jù)類型(簡單數(shù)據(jù)類型)

    string 字符串類型
    number 數(shù)值
    boolean 布爾類型(true | false)
    undefined 未定義
    null 空(對(duì)象) 這個(gè)類型有點(diǎn)特殊

    • 復(fù)雜數(shù)據(jù)類型(復(fù)合數(shù)據(jù)類型)

    Object 對(duì)象類型
    Array 數(shù)組類型
    Funcation 函數(shù)類型
    Date 日期類型
    String 對(duì)象
    Number
    Boolean

    • **判斷數(shù)據(jù)類型的關(guān)鍵字是 typeof **
      注意
      復(fù)雜數(shù)據(jù)在使用typeof操作的時(shí)候,打印出來的結(jié)果都是object ,除了函數(shù)

    • 等于和全等

    • 賦值(=)
      等于符號(hào)(==):比較的時(shí)候只判斷數(shù)值是否是相等的
      全等符號(hào)(===):比較的時(shí)候不僅要比較數(shù)據(jù)還需要比較類型
      不等于(!=)
      不全等于(!==)

    • 關(guān)系運(yùn)算符

    • 返回值:布爾類型,要么是true要么是false

大于 >
小于 <
大于等于 >=
小于等于 <=

  • 邏輯運(yùn)算符(重點(diǎn))
  • 邏輯非( ! ) 取反
  • 邏輯或( || )
>**語法:表達(dá)式1 || 表達(dá)式2
結(jié)果:
    判斷表達(dá)式1,如果表達(dá)式1為真,那么就返回表達(dá)式
    如果表達(dá)式1的值為假,那么就返回表達(dá)式2**
- **邏輯與(&&)**
>**語法:表達(dá)式1 && 表達(dá)式2
結(jié)果:
    如果表達(dá)式1為真,返回表達(dá)式2
    如果表達(dá)式1為假,返回表達(dá)式1**
- **返回值是表達(dá)式枫夺,而不是布爾值**
  • 值類型和引用類型(重點(diǎn))
  • 值類型
>**string
number
boolean
undefined

值類型:存儲(chǔ)的是具體的值
賦值:
1.把右邊變量存儲(chǔ)存儲(chǔ)的值(具體的數(shù)據(jù))復(fù)制一份給左邊的變量
2.值類型的賦值,是簡單數(shù)據(jù)的復(fù)制,他們保存在相對(duì)獨(dú)立的空間中,彼此不會(huì)影響
**
- 引用類型
>**object類型
引用類型:存儲(chǔ)的是指向具體值得地址(引用)
賦值:
1.把右邊變量存儲(chǔ)存儲(chǔ)的值(指向具體數(shù)據(jù)的地址)復(fù)制一份給左邊的變量
2.引用類型賦值:修改了某個(gè)對(duì)象的屬性,對(duì)另外一個(gè)對(duì)象的屬性會(huì)有影響
**
- 在函數(shù)中的使用
值類型作為函數(shù)的參數(shù):
實(shí)參和形參他們的數(shù)據(jù)是相互獨(dú)立的

<script>
        function func(param){
            console.log(param);  //我是字符串
            param = "我也是一個(gè)字符串";
            console.log(param);
        }
        var a = "我是字符串";
        func(a);
        console.log(a);
</script>

引用類型作為函數(shù)的參數(shù):
形參和實(shí)參共享同一份數(shù)據(jù),修改其中的某個(gè)對(duì)象對(duì)另外一個(gè)對(duì)象也會(huì)有影響

<script>
    //02 引用類型作為函數(shù)的參數(shù)傳遞
    var obj = {name:"小明"};
    function funcName(param) {
        param.name = "小王";
        param = {
            name:"張明明"
        };
        console.log(param.name);    // 張明明
    }
    funcName(obj);
    console.log(obj.name);   // 小王
    //
   //
    var arr1 = [1,2,3];
    var arr2 = arr1;
    console.log(arr1);
    console.log(arr2);
    //該行代碼切斷和arr1的關(guān)系,對(duì)象內(nèi)保存的地址指向了另外一塊內(nèi)存空間
    arr1.push(4);
    arr2 = [1,2,3];    
    console.log(arr1);  //1,2,3,4
    console.log(arr2);  //1,2,3
</script>
  • 對(duì)象的動(dòng)態(tài)特性
  • 已經(jīng)定義好的對(duì)象绘闷,我們對(duì)它進(jìn)行增刪改查的操作
  • 訪問對(duì)象有兩種形式:

**
1.點(diǎn)語法
在使用點(diǎn)語法設(shè)置對(duì)象的屬性的時(shí)候,如果對(duì)象中不存在改屬性,就是增加操作
如果對(duì)象中已經(jīng)存在該屬性,那么就是修改操作
2.[ ] 中括號(hào)語法
對(duì)象:鍵 - 值(key-value)對(duì)的集合

注意點(diǎn):在使用[]語法的時(shí)候,鍵應(yīng)該使用雙引用
**

  • in關(guān)鍵詞的使用

  • 作用:
    1.遍歷對(duì)象的key
    2.判斷某個(gè)對(duì)象中是否存在指定的屬性

  • 語法
    鍵 in 對(duì)象 返回值:布爾類型的值
    注意點(diǎn):在使用in關(guān)鍵字的時(shí)候橡庞,key是字符串较坛,需要加上雙引號(hào)

  • 遍歷數(shù)組
    遍歷對(duì)象 在這里必須使用[ ]語法不能直接使用點(diǎn)語法
    在數(shù)組中索引是key ,數(shù)組的元素是value

  • delete關(guān)鍵字

    • 作用:
      (1) 刪除對(duì)象中的屬性
      (2) 刪除沒有使用var關(guān)鍵字聲明的全局變量

      注意:
      (1)返回值 布爾類型的值(我們可以通過該值來判斷是否刪除成功)
      (2)使用var關(guān)鍵字聲明的變量無法被刪除
      (3)刪除對(duì)象中不存在的屬性沒有任何變化,但是返回值為true
      (4)不能刪除window下面的全局變量(使用var聲明),但是可以刪除直接定義在window上面的屬性
  • 循環(huán)對(duì)象

for循環(huán)
while
do...while(至少會(huì)執(zhí)行一次)
for...in(主要用于遍歷對(duì)象)

  • 函數(shù)的幾種創(chuàng)建
    聲明函數(shù)
<script>
    function 函數(shù)名稱 (形參1,形參2)
    {
        //函數(shù)體
    }

    //調(diào)用
    //函數(shù)的名稱();

    function funcName (){

    }
</script>

函數(shù)表達(dá)式

<script>
    //01 匿名函數(shù)
    var func01 = function (){
    };
    //02 命名的函數(shù)表達(dá)式
    var func02 = function func(){
    };
</script>

使用構(gòu)造函數(shù)創(chuàng)建函數(shù)對(duì)象

<script>
    var func = new Function();   //沒有內(nèi)容(沒有函數(shù)體)
    func();

    function funcTest (){};     //等價(jià)

    var func02 = new Function("console.log('demo');");
    func02();
</script>
<script>
    var obj = {name:"zhangsan"};
    var obj2 = new Object();
    var obj3 = {};
</script>

回顧前面這些呢,就是想讓接下來看面向?qū)ο蟮臅r(shí)候扒最,腦海中有個(gè)印象和回憶丑勤,當(dāng)然,這也是想到會(huì)有一些編程小白理解起來困難的原因吧趣。知識(shí)點(diǎn)有點(diǎn)枯燥,學(xué)編程嘛 得有點(diǎn)耐心才行.

面向過程 & 面向?qū)ο?/h3>
  • 都是一種解決問題的思路(思想)
  • 面向過程在解決問題的時(shí)候,關(guān)注的是解決問題需要的一個(gè)接著一個(gè)的過程(步驟)
  • 面向?qū)ο笤诮鉀Q問題的時(shí)候,關(guān)注的是解決問題所需要的對(duì)象.
  • 舉例
    就用洗衣服來形象的打個(gè)比方

如果你是用手洗的話,那就不得不考慮 倒水-搓衣服-加洗衣液-清水涮-手?jǐn)Q干-晾起來 這就是面向過程
但如果你忽略這些步驟 直接放洗衣機(jī)洗的話 可能都不用考慮晾干的步驟 這就是面向?qū)ο?/p>

什么是對(duì)象
  • 對(duì)象的特征 (靜態(tài)的描述信息),比如:學(xué)號(hào) - 性別 - 年齡 - 家庭住址 - 身高 - 體重 ... 等等
  • 有的對(duì)象有行為 (動(dòng)態(tài)的特征), 比如:吃飯 - 睡覺 - 開車 - 玩游戲 - 談戀愛
  • 代碼示例
    var zhangsan = {
            name:"張三",
            sex:"男",
            age:18,
            address:"天上人間1號(hào)公館",

            eat:function () {
                console.log('能吃');
            },
            sleep:function () {
                console.log("能睡");
            },
            say:function () {
                console.log("能說話");
            },
            run:function () {
                console.log("能運(yùn)動(dòng)");
            },
            song:function () {
                console.log("能唱歌");
            }
        };

        //打印對(duì)象的屬性并調(diào)用相關(guān)的方法
        console.log(zhangsan.name,zhangsan.age,zhangsan.address);
        zhangsan.say();
        zhangsan.sleep();
現(xiàn)實(shí)中的對(duì)象和編碼中的對(duì)象
  • 靜態(tài)的描述信息:屬性
  • 動(dòng)態(tài)的行為特征:方法
  • 面向?qū)ο蠛兔嫦蜻^程都是解決問題的一種方式(思想),沒有孰優(yōu)孰劣之分
  • 面向?qū)ο蟊旧硎菍?duì)面向過程的封裝
為什么要使用面向?qū)ο缶幊?
  • 更方便
  • 復(fù)用性會(huì)更好
    高內(nèi)聚和低耦合(電路)
    冗余(重復(fù)的東西)-->封裝(提取相同的部分作為函數(shù)體,抽取不同的部分作為參數(shù))
js對(duì)象是由兩個(gè)對(duì)象組成的
  • 一個(gè)叫構(gòu)造函數(shù)對(duì)象
  • 一個(gè)叫原型對(duì)象
編程語言
  • ** 匯編語言是對(duì)內(nèi)存的地址進(jìn)行編程的**
  • ** C語言是第一款比較流行的面向過程語言 **
  • ** C語言和面向?qū)ο笫蔷幊淌澜缫粋€(gè)劃時(shí)代的里程碑**
  • ** 構(gòu)造函數(shù)和普通函數(shù)是一回事,只不過構(gòu)造函數(shù)是通過普通函數(shù)實(shí)現(xiàn)的**
面向?qū)ο蟮奶匦裕?/h5>
  • 封裝
    作用:方便代碼的維護(hù)法竞,提高代碼的復(fù)用性,更安全的訪問數(shù)據(jù)的方式
    注意: js中的封裝多了一層意思强挫,就是使用對(duì)象來封裝變量和函數(shù)
  • 繼承
    • 現(xiàn)實(shí)生活中的繼承:繼承遺產(chǎn)岔霸,一個(gè)人獲得另一個(gè)人所擁有的財(cái)富或者是資源的方式。
    • 編程語言中的繼承:一個(gè)類(對(duì)象)獲得另外一個(gè)類(對(duì)象)的屬性和方法的一種方式俯渤。
    • 面向?qū)ο蟮恼Z言特征:類(C++)C(沒有類)
    • js中沒有類(class),支持面向?qū)ο蟮恼Z言呆细。
  • 多態(tài)
    • 表現(xiàn):
      對(duì)于相同的操作,不同的對(duì)象表現(xiàn)出不同的行為八匠。
      隱藏不同絮爷。
    • 實(shí)現(xiàn):
      js天生具備多態(tài)的特性(弱類型的語言)
創(chuàng)建對(duì)象的四種方法
  • 字面量的方式
var book1 = {
        name:"悟空傳",
        author:"今何在",
        press:"湖南文藝出版社",
        price:"28.00",
        logDes:function(){
            console.log("書名:" + this.name + "作者:" + this.author);
        }
    }
    var book2 = {
        name:"什么是批判",
        author:"福柯",
        press:"北京大學(xué)出版社",
        price:"52.00",
        logDes:function(){
            console.log("書名:" + this.name + "作者:" + this.author);
        }
    }
    var book3 = {
        name:"數(shù)據(jù)結(jié)構(gòu)",
        author:"嚴(yán)蔚敏",
        press:"清華大學(xué)出版社",
        price:"30.00",
        logDes:function(){
            console.log("書名:" + this.name + "作者:" + this.author);
        }
    }

    console.log(book1.name);
    boo1.logDes();

存在的問題:
創(chuàng)建的對(duì)象無法復(fù)用,復(fù)用性差
如果需要?jiǎng)?chuàng)建多個(gè)相似的對(duì)象梨树,那么代碼中冗余度太高(重復(fù)的代碼太多)

  • 內(nèi)置的構(gòu)造函數(shù)
    //01 創(chuàng)建空的對(duì)象
    var book1 = new Object();
    //02 設(shè)置屬性
    book1.name = "花田半畝";
    book1.author = "田維";
    book1.price = "40.01";

    //03 設(shè)置方法
    book1.logDes = function (){
        console.log("書名:" + this.name);
    }

    book1.logDes();

    //創(chuàng)建多個(gè)對(duì)象
    var book2 = new Object();
    book2.name = "三國演義";
    book2.author = "羅貫中";
    book2.price = "34.01";
    book2.logDes = function (){
        console.log("書名:" + this.name);
    }
    console.log(book1);
    console.log(book2);

存在的問題:
創(chuàng)建的對(duì)象無法復(fù)用,復(fù)用性差
如果需要?jiǎng)?chuàng)建多個(gè)相似的對(duì)象坑夯,那么代碼中冗余度太高(重復(fù)的代碼太多)

  • 簡單工廠函數(shù)創(chuàng)建對(duì)象
    //01 封裝創(chuàng)建對(duì)象的過程
    function createBook () {

        var book = new Object();
        book.name = "聲名狼藉者的生活";
        book.price = 42.00;
        book.author = "福柯";
        book.press = "北京大學(xué)出版社";
        book.read = function () {
            console.log("我的書名為:聲名狼藉者的的生活,作者為嘎账模柯....");
        };
        return book;
    }

    //02 使用封裝好的工廠函數(shù)來創(chuàng)建對(duì)象
    var book1 = createBook();
    var book2 = createBook();

    //03 打印對(duì)象的屬性并調(diào)用對(duì)象的方法
    console.log(book1.name);
    console.log(book2.name);
    book1.read();
    book2.read();

    console.log("_________________________");
    //04 說明:以上代碼確實(shí)能夠快速簡單的創(chuàng)建出新的對(duì)象,但是創(chuàng)建出來的對(duì)象內(nèi)部的屬性和方法相同,這并不是我們想要的柜蜈。

    //05 對(duì)上面的工廠函數(shù)進(jìn)行改進(jìn)
    //改進(jìn)思路:封裝不變的部分,提取變化的部分作為參數(shù)
    function createBookNew (name,price,author,press) {

        var book = new Object();
        book.name = name;
        book.price = price;
        book.author = author;
        book.press = press;
        book.read = function () {
            console.log("我的書名為:"+book.name+",作者為"+book.author+"....");
        };

        return book;
    }

    //06 使用新的工廠函數(shù)來創(chuàng)建對(duì)象
    var book1 = createBookNew("聲名狼藉者的的生活","42.00","福柯","北京大學(xué)出版社");
    var book2 = createBookNew("人性的枷鎖","49.00","毛姆","華東師范大學(xué)出版社");
    var book3 = createBookNew("悟空傳","28.00","今何在","湖南文藝出版社");

    //07 打印對(duì)象的屬性,調(diào)用對(duì)象的方法
    console.log(book1.name);
    console.log(book2.name);
    console.log(book3.name);

    book1.read();
    book2.read();
    book3.read();

存在的問題:
如果創(chuàng)建多個(gè)不同類型的對(duì)象床嫌,那么我們無法分辨

  • 自定義構(gòu)造函數(shù)創(chuàng)建對(duì)象
    • 提供一個(gè)構(gòu)造函數(shù)
    • 通過this指針來設(shè)置屬性和方法
    • 通過new操作符創(chuàng)建對(duì)象
    //1.提供一個(gè)構(gòu)造函數(shù)
    //構(gòu)造函數(shù)簡單介紹:
    //作用:對(duì)對(duì)象進(jìn)行一些初始化的設(shè)置
    //和普通函數(shù)區(qū)別:(01)首字母大寫(02)調(diào)用方式不一樣和new配合使用
    function Person(name,age){
        // 默認(rèn) 創(chuàng)建對(duì)象
        //var o = new Object();
        //默認(rèn)會(huì)賦值給this
        //this = o;
        //2. 通過this指針來設(shè)置屬性和方法
        this.name = name;
        this.age = age;
        this.showName = function(){
            console.log(this.name);
        };
        this.showAge = function(){
            console.log(this.age);
        }
        //默認(rèn)返回
        //return this;
    }
    //3. 使用new操作符來創(chuàng)建對(duì)象
    var p1 = new Person("張三",20);
    var p2 = new Person("張老漢",200);
    console.log(p1);
    console.log(p2);
/*
 1.  自定義構(gòu)造函數(shù)方式創(chuàng)建對(duì)象內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)
1.1 我們?cè)谑褂胣ew關(guān)鍵字調(diào)用構(gòu)造哈函數(shù)的時(shí)候跨释,內(nèi)部默認(rèn)會(huì)創(chuàng)建一個(gè)空的對(duì)象
1.2 默認(rèn)會(huì)把這個(gè)空的對(duì)象賦值給this
1.3 通過this來設(shè)置新對(duì)象的屬性和方法
1.4 在構(gòu)造函數(shù)的最后,默認(rèn)會(huì)把新創(chuàng)建的對(duì)象返回
2.自定義構(gòu)造函數(shù)和工廠函數(shù)對(duì)比
2.1 函數(shù)的名稱不一樣厌处,構(gòu)造函數(shù)首字母大寫
2.2 自定義構(gòu)造函數(shù)創(chuàng)建方式內(nèi)部會(huì)自動(dòng)的創(chuàng)建空對(duì)象并且賦值給this
2.3 默認(rèn)會(huì)自動(dòng)返回新創(chuàng)建的對(duì)象
3.返回值
3.1. 沒有顯示的return ,默認(rèn)會(huì)把新創(chuàng)建的對(duì)象返回
3.2. 顯示的執(zhí)行了return語句鳖谈,就得看具體的情況
3.2.1 返回的是值類型,那么直接忽略該返回阔涉,把新創(chuàng)建的對(duì)象返回
3.2.2 返回的是引用類型的數(shù)據(jù)缆娃,會(huì)覆蓋掉新創(chuàng)建的對(duì)象,直接返回引用數(shù)據(jù)類型的值
*/
        function Dog(name)
        {
            this.name = name;
            //return "demo";  忽略
            //return function (){};
        }

        var dog = new Dog("阿黃");
        console.log(dog);
構(gòu)造函數(shù)的的注意事項(xiàng)
  • 函數(shù)傳值
function Student(number,className,log){
        this.number = number;
        this.className = className;
        this.log = log;
    }

    var stu1 = new Student("201601","九陰真經(jīng)修煉01班",function(){
       console.log("學(xué)號(hào):" + this.number);
    });

    var stu2 = new Student("201602","九陰真經(jīng)修煉01班",function(){
        console.log("班級(jí)名稱:" + this.className);
    });

    stu1.log();
    stu2.log();
  • 對(duì)象的類型(判斷)
function Person(){};
    function Dog(){};

    var p1 = new Person();
    var dog1 = new Dog();

    //關(guān)鍵字 instanceOf 用來判斷當(dāng)前對(duì)象是否是某個(gè)類型的實(shí)例(檢查某個(gè)對(duì)象是否是使用指定構(gòu)造函數(shù)創(chuàng)建的)
    //語法: 對(duì)象 instanceOf 構(gòu)造函數(shù)(類型)
    console.log(p1 instanceof Person);
    console.log(p1 instanceof Dog);
    console.log(dog1 instanceof Person);
    console.log(dog1 instanceof Dog);
  • 構(gòu)造器屬性(獲取
function Person(){};
    function Dog(){};
    var p1 = new Person();
    var dog1 = new Dog();

    //在所有的對(duì)象中瑰排,都擁有一個(gè)構(gòu)造器屬性:constructor
    console.log(p1.constructor);
    console.log(dog1.constructor);
  • 函數(shù)調(diào)用
    new :創(chuàng)建對(duì)象贯要,并在最后返回該對(duì)象
    構(gòu)造函數(shù):用于初始化對(duì)象
    以普通函數(shù)的方式來調(diào)用構(gòu)造函數(shù),那么內(nèi)部的this指向的是window
function Person(name)
    {
        if(this instanceof Person)
        {
            this.name = name;
        }else
        {
            return new Person(name);
        }
    }

    var p1 = new Person("嗶哩嗶哩");

    //構(gòu)造函數(shù)本身是一個(gè)函數(shù)椭住,在調(diào)用可以直接調(diào)用
    var p2 =  Person("嘩啦嘩啦");  //這是一個(gè)錯(cuò)誤的演示(不要這樣寫代碼)
    console.log(p2);  //undefined
  • 存在問題
    ** 把函數(shù)寫在外部崇渗,破壞了封裝性。
    增加一個(gè)全局變量。**
var showName = function(){
            console.log("姓名:");
    }

    function Person(name,age){
        this.name = name;
        this.age = age;
        this.showName = showName;
    }

    //創(chuàng)建對(duì)象
    var p1 = new Person("張小花",18);
    var p2 = new Person("張全蛋",99);
    p1.showName();
    p2.showName();

    //每創(chuàng)建一個(gè)對(duì)象宅广,內(nèi)部都會(huì)聲明一個(gè)showName函數(shù)
    console.log(p1.showName == p2.showName);  //false

思維導(dǎo)圖 --> 如果圖片不是很清晰的話 請(qǐng)下載到本地查看 !

**Js - 面向?qū)ο缶幊桃?*

未完待續(xù)! 接下來會(huì)講解構(gòu)造函數(shù)的原型對(duì)象!!
內(nèi)容枯燥, 但是每一個(gè)牛逼的工程師都是這樣一步一步走過來的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末葫掉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跟狱,更是在濱河造成了極大的恐慌俭厚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驶臊,死亡現(xiàn)場(chǎng)離奇詭異挪挤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)关翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門扛门,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笤休,你說我怎么就攤上這事尖飞≈⒏保” “怎么了店雅?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贞铣。 經(jīng)常有香客問我闹啦,道長,這世上最難降的妖魔是什么辕坝? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任窍奋,我火速辦了婚禮,結(jié)果婚禮上酱畅,老公的妹妹穿的比我還像新娘琳袄。我一直安慰自己,他們只是感情好纺酸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布窖逗。 她就那樣靜靜地躺著,像睡著了一般餐蔬。 火紅的嫁衣襯著肌膚如雪碎紊。 梳的紋絲不亂的頭發(fā)上昂验,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天莹桅,我揣著相機(jī)與錄音订晌,去河邊找鬼带膀。 笑死奖慌,一個(gè)胖子當(dāng)著我的面吹牛永乌,可吹牛的內(nèi)容都是我干的储玫。 我是一名探鬼主播澎羞,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼锅锨!你這毒婦竟也來了螺句?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤橡类,失蹤者是張志新(化名)和其女友劉穎蛇尚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顾画,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡取劫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了研侣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱邪。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖庶诡,靈堂內(nèi)的尸體忽然破棺而出惦银,到底是詐尸還是另有隱情,我是刑警寧澤末誓,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布扯俱,位于F島的核電站,受9級(jí)特大地震影響喇澡,放射性物質(zhì)發(fā)生泄漏迅栅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一晴玖、第九天 我趴在偏房一處隱蔽的房頂上張望读存。 院中可真熱鬧,春花似錦呕屎、人聲如沸让簿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尔当。三九已至,卻和暖如春琅催,著一層夾襖步出監(jiān)牢的瞬間居凶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工藤抡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侠碧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓缠黍,卻偏偏與公主長得像弄兜,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容