繼承

1.繼承有什么作用?

使用現(xiàn)有類的所有功能醒叁,并在無需重新編寫原來的類的情況下對這些功能進行擴展。

2.有幾種常見創(chuàng)建對象的方式? 舉例說明?

(1)工廠模式

function createPerson(name, age){
  var o = new Object();
  o.name = name;
  o.age = age;
  o.sayName = function(){
    console.log('my name is ' + this.name);
  }
  return o;
}
var p1 = createPerson('hunger', 20);
var p2 = createPerson('velly', 30);
p1.sayName();//my name is hunger
p2.sayName();//my name is velly

(2)構造函數模式

function Person(name, age){
  this.name = name;
  this.age = age;
  this.sayName = function(){
    console.log(this.name);    
  }
}
var p1 = new Person('hunger', 20);
var p2 = new Person('velly', 30);
p1.sayName();//hunger
p2.sayName();//velly

(3)原型模式

function Person(){
}
Person.prototype = {
  construtor: Person;
  name: 'hunger';
  age: 20;
  friends: ['velly', 'jiregu'];
  this.sayName: function(){
    console.log(this.name);
  }
}
var p1 = new Person();
var p2 = new Person();
p1.friends.push('jrg');
console.log(p1.friends);//'velly, jirengu,jrg'
console.log(p2.friends);//'velly,jirengu,jrg'

(4)組合使用構造函數模式和原型模式:

function Person(name, age){
  this.name = name;
  this.age = age; 
}
Person.prototype.sayName = function(){
  console.log(this.name);
}
var p1 = new Person('hunger', 20);
var p2 = new Person('jirengu', 30);
p1.sayName();//hunger
p2.sayName();//jirengu

3.下面兩種寫法有什么區(qū)別?

//方法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);

區(qū)別:同樣都是創(chuàng)建printName方法嘹黔,方法1的printName方法是在函數Person實例對象里的,方法2是在Person的prototype對象上的署惯。當再創(chuàng)建一個Person實例對象的時候行施,方法1又將會再創(chuàng)建一個printName方法,占用新的內存若锁,而方法2將一個公用的printName方法寫在原型上搁骑,當對象要使用該方法只需到原型鏈里調用就可以了,達到節(jié)省內存的效果又固。

4.Object.create有什么作用仲器?兼容性如何?如何使用仰冠?

  • 作用:創(chuàng)建一個擁有指定原型和若干個指定屬性的對象乏冀。
  • 兼容性:


    兼容性
  • 使用:
function Person(name, age){
  this.name = name;
  this.age = age;
}
Person.prototype.sayName = function(){
  console.log(this.name);
}
function Male(name, age, sex){
  Person.call(this, name, age);
  this.sex = sex;
}
Male.prototype = Object.create(Person.prototype);
Male.prototype.saySex = function(){
  console.log(this.sex);
}
var p1 = new Male('hunger', 20, 'nan');
p1.saySex();

5.hasOwnProperty有什么作用? 如何使用洋只?

  • 作用:判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性
  • 語法:obj.hasOwnProperty(prop)(prop為要檢測的屬性名稱)
    -使用:
p1.hasOwnProperty('name');//true
p1.hasOwnProperty('sayName');//false
p1.hasOwnProperty.prototype('saySex');//true

6.實現(xiàn)Object.create的 polyfill辆沦,如:(ps: 寫個 函數create,實現(xiàn) Object.create 的功能)

function create(obj){
  function Temp(){}
  Temp.prototype = obj;
  return new Temp();
}
var obj = {a: 1, b:2};
var obj2 = create(obj);
console.log(obj2.a); //1

7.如下代碼中call的作用是什么?

unction Person(name, sex){ 
  this.name = name; 
  this.sex = sex;
}
function Male(name, sex, age){ 
  Person.call(this, name, sex); 
  //這里的call是獲取構造函數Person的屬性识虚,把Person的環(huán)境改到自己(Male)的作用域內肢扯,從而實現(xiàn)構造函數的繼承。
  this.age = age;
}

8.補全代碼担锤,實現(xiàn)繼承

function Person(name, sex){ 
  this.name = name;
  this.sex= sex;
}
Person.prototype.getName = function(){ 
  return this.name;
}; 
function Male(name, sex, age){ 
  Person.call = (this, name, sex);
  this.age = age;
}
Male.prototype = Object.create(Person.prototype);
Male.prototype.constructor = Male;
Male.prototype.getAge = function(){ 
  return this.age;
};
Male.prototype.printName = function(){
  console.log(this.name);
}
var ruoyu = new Male('若愚', '男', 27);
ruoyu.printName();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蔚晨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肛循,更是在濱河造成了極大的恐慌铭腕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件多糠,死亡現(xiàn)場離奇詭異累舷,居然都是意外死亡,警方通過查閱死者的電腦和手機夹孔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門被盈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搭伤,你說我怎么就攤上這事害捕。” “怎么了闷畸?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵尝盼,是天一觀的道長。 經常有香客問我佑菩,道長盾沫,這世上最難降的妖魔是什么裁赠? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赴精,結果婚禮上佩捞,老公的妹妹穿的比我還像新娘。我一直安慰自己蕾哟,他們只是感情好一忱,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谭确,像睡著了一般帘营。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逐哈,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天芬迄,我揣著相機與錄音,去河邊找鬼昂秃。 笑死禀梳,一個胖子當著我的面吹牛,可吹牛的內容都是我干的肠骆。 我是一名探鬼主播算途,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚀腿!你這毒婦竟也來了嘴瓤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唯咬,失蹤者是張志新(化名)和其女友劉穎纱注,沒想到半個月后畏浆,有當地人在樹林里發(fā)現(xiàn)了一具尸體胆胰,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年刻获,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜀涨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝎毡,死狀恐怖厚柳,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情沐兵,我是刑警寧澤别垮,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站扎谎,受9級特大地震影響碳想,放射性物質發(fā)生泄漏烧董。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一胧奔、第九天 我趴在偏房一處隱蔽的房頂上張望逊移。 院中可真熱鬧,春花似錦龙填、人聲如沸胳泉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扇商。三九已至,卻和暖如春喘先,著一層夾襖步出監(jiān)牢的瞬間钳吟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工窘拯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留红且,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓涤姊,卻偏偏與公主長得像暇番,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子思喊,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 博客內容:什么是面向對象為什么要面向對象面向對象編程的特性和原則理解對象屬性創(chuàng)建對象繼承 什么是面向對象 面向對象...
    _Dot912閱讀 1,424評論 3 12
  • 1.繼承(接口繼承和實現(xiàn)繼承) 繼承是 OO 語言中的一個最為人津津樂道的概念壁酬。許多 OO 語言都支持兩種繼承方式...
    believedream閱讀 952評論 0 3
  • 繼承有什么作用? (難度:3*) 繼承可以使一個對象直接使用另一個對象的屬性和方法。 有幾種常見創(chuàng)建對象的方式? ...
    coolheadedY閱讀 527評論 0 0
  • Q&A: 1. 繼承有什么作用? 概念:繼承是指一個對象直接使用另一個對象的屬性和方法恨课。 作用:繼承劃分了類的層次...
    進擊的阿群閱讀 586評論 0 1
  • 面向對象的語言都有一個類的概念舆乔,通過類可以創(chuàng)建多個具有相同方法和屬性的對象,ES6之前并沒有類的概念剂公,在ES6中引...
    Erric_Zhang閱讀 1,109評論 1 4