繼承

問答

  • 繼承有什么作用?
    繼承可以將另一個function上的prototype拷貝過來,當想做多個屬性的面包的時候會更加的方便,方法不用重復copy了。

  • 有幾種常見創建對象的方式? 舉例說明?
    "工廠模式"、“構造函數模式”、“原型模式”
    工廠模式:
<script>
    var person = function (name,age) {
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.attribute = function (name) {
            console.log("my name is "+ this.name);
            console.log("my age is "+ this.age);
        }
        return obj;
    }
    var myself = new person("slr",21);
    myself.attribute();
</script>

構造函數模式:

<script>
    function Person(name, age){
        this.name = name
        this.age = age
        this.attribute = function(){
            console.log(this.name + this.age);
        }
    }
    var myself = new Person("slr",21);
    var myself2 = new Person("wby",20);
    myself.attribute();
    myself2.attribute();
</script>

構造函數是獨立的每個copy一份,雖然方法一樣,但是不是一個東西了


difference

原型模式:

<script>
    function Person(name,age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.sayAttribute = function () {
        console.log(this.name + this.age)
    }
    var p1 = new Person("slr",21);
    p1.sayAttribute();
</script>
共用方法了

  • 下面兩種寫法有什么區別?
//方法1
function People(name, sex){
    this.name = name;
    this.sex = sex;
    this.printName = function(){
        console.log(this.name);
    }
}
var p1 = new People('谷', 2)
//方法2
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}
Person.prototype.printName = function(){
    console.log(this.name);
}
var p1 = new Person('若愚', 27);

方法一構造出來的每個方法和屬性都是獨立的,獨一份new出來。而方法二的屬性是每個獨一份的,但是方法是共用的,上面有解釋過了。


  • Object.create 有什么作用?兼容性如何?如何使用? (難度:***)
    object.create(proto,[propertiesObject])
  • 這是ES5新出的方法
  • proto:指定的新創建對象的原型
  • [propertiesObject]:可選參數,是對象的屬性描述符,里面可以添加一些自定義的屬性和方法。
    兼容性:只兼容IE9+,Chrome5+,Firefox 4.0+,Opear 11.60+,Safari 5+
<script>
    //    這是inherit
    function inherit(a, b) {
        var c = Object.create(a.prototype)
        b.prototype = c;
        c.constructor = b;
    }
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.sayAttribute = function () {
        console.log(this.name + this.age)
    }
    function PersonSecond(name, age, sex) {
        Person.call(this, name, age);//這里的作用就是調用函數Person在PersonSecond函數內運行
        this.sex = sex;
    }
    //這里
    inherit(Person, PersonSecond);
    Person.prototype.newSolution = function () {
        console.log("PersonSecond sex "+ this.sex);
    }
    var p1 = new PersonSecond("slr", 21, "male");
    p1.sayAttribute();
    p1.newSolution();
</script>

  • hasOwnProperty有什么作用? 如何使用? (難度:***)
    hasOwnProperty可以得出對象是否有指定的名稱和屬性
uploaddddddddd.png

  • 實現Object.create的 polyfill,如:(ps: 寫個 函數create,實現 Object.create 的功能)
function create(obj){
    if(Object.create){
        return Object.create(obj);
    }else {
        function show(){};
        show.prototype=obj;
        return new show();
    }
}
var obj = {a: 1, b:2};
var obj2 = create(obj);
console.log(obj2.a); //1

用于確認函數的兼容性,如果兼容就可以就會執行。

<script>
    if (typeof Object.create != 'function') {//首先判斷是否兼容
        Object.create = (function () {

            var Temp = function () {
            };

            return function (prototype) {
                if (arguments.length > 1) {
                    return false;
                }
                if (prototype !== Object(prototype)) {
                    return false;
                }
                if (prototype === null) {
                    return false;
                }

                Temp.prototype = prototype;
                var result = new Temp();
                Temp.prototype = null;
                return result;
            };
        })();
    }
</script>

  • 如下代碼中call的作用是什么? (難度:****)
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}
function Male(name, sex, age){
    Person.call(this, name, sex);    //這里的 call 有什么作用
    this.age = age;
}

上面有說過,這里的call是為了指向上一個函數,讓上一個函數在Male里面執行,以便獲得屬性。


  • 補全代碼,實現繼承 (難度:****)
function Person(name, sex){
    // todo ...
}
Person.prototype.getName = function(){
    // todo ...
};    
function Male(name, sex, age){
   //todo ...
}
//todo ...
Male.prototype.getAge = function(){
    //todo ...
};
var ruoyu = new Male('若愚', '男', 27);
ruoyu.printName();
<script>
    function Person(name, sex) {
        this.name = name;
        this.sex = sex;
    }
    Person.prototype.getName = function () {
        console.log(this.name);
    };
    function Male(name, sex, age) {
        Person.call(this,name,sex);
        this.age = age;
    }
    Male.prototype = Object.create(Person.prototype)//ES5的方法

    Male.prototype.getAge = function () {
        console.log(this.age)
    };
    Male.prototype.printName = function () {
        console.log(this.getName())
    }
    var ruoyu = new Male('若愚', '男', 27);
    ruoyu.printName();
</script>

CODE

//功能描述: 
// 1. 可使用 dialog.open() 去打開彈窗
// 2. 當點擊確定、取消時可使用用戶自定義事件
// 3. dialog 可拖動
// 4. 允許頁面展示多個 dialog
function Dialog(){
//todo ...
}
var tpl = '<ul><li>列表1</li><li>列表2</li><li>列表1</li><li>列表1</li></ul>';
$('#open4').on('click',function(){
  var dialog4 = new Dialog();
  dialog4.open({
    title: '谷',
    message: tpl,
    isShowCloseBtn: true,
    isShowConfirmBtn: true,
    onClose: function(){
      alert('close')
    },
    onConfirm: function(){
      alert('確定');
    }
  });
});

繼承-彈框

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容

  • 繼承有什么作用? (難度:3*) 繼承可以使一個對象直接使用另一個對象的屬性和方法。 有幾種常見創建對象的方式? ...
    coolheadedY閱讀 533評論 0 0
  • 1. apply、call 、bind有什么作用,什么區別? call ,apply的作用:調用一個函數,傳入函數...
    Rising_suns閱讀 401評論 0 0
  • 創建對象 工廠模式 => 構造函數模式 => 原型對象模式 => 構造函數模式+原型對象模式 工廠模式 構造函數模...
    老虎愛吃母雞閱讀 255評論 0 0
  • apply、call 、bind有什么作用,什么區別 apply:fn.apply( obj,])將fn函數里的t...
    邵志遠閱讀 533評論 0 0
  • 作業 this 相關問題 問題1: apply、call 有什么作用,什么區別apply()和call()函數都可...
    饑人谷_桶飯閱讀 398評論 0 0