摘要:化偽花貓偽,花,貓借助構(gòu)造函數(shù)無(wú)論是原型鏈還是原型式繼承,都有相同的問題。要解決這樣的問題,可以借助構(gòu)造函數(shù)也可以叫做偽造對(duì)象或經(jīng)典繼承。對(duì)于繼承來(lái)講,可以試想子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)時(shí),講子對(duì)象的和父對(duì)象的綁定在一起。
繼承 原型式繼承
所謂原型式繼承,就是定義一個(gè)函數(shù),該函數(shù)中創(chuàng)建一個(gè)臨時(shí)性的構(gòu)造函數(shù),并將作為參數(shù)傳入的對(duì)象作為這個(gè)構(gòu)造函數(shù)的原型,最后返回這個(gè)構(gòu)造函數(shù)的實(shí)例對(duì)象
function object(o){ dunction F (){ F.prototype = o return new F() }
根據(jù)原型式繼承所總結(jié)的object()函數(shù)實(shí)現(xiàn)繼承,如下列代碼:
var person ={ name : "花", friends : ["偽","化"] } var result = object(person); result.friends.push("貓"); console.log(result.freends);//偽,化,貓
這種原型式繼承要求必須具有一個(gè)對(duì)象可以作為另一個(gè)對(duì)象的基礎(chǔ)。
上述原型式繼承,也可以用Object的create()方法代替自定義的object()函數(shù),從而是想規(guī)范化。
var person = { name : "化" friends : ["偽","花"] } var anotherperson = Object.create(person); anotherperson.friends.push("貓"); console.log(anotherperson.friends);//偽,花,貓借助構(gòu)造函數(shù)
無(wú)論是原型鏈還是原型式繼承,都有相同的問題。要解決這樣的問題,可以借助構(gòu)造函數(shù)(也可以叫做偽造對(duì)象或經(jīng)典繼承)。
這種方式實(shí)現(xiàn)非常簡(jiǎn)單,就是在子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)。具體可以通過調(diào)用apply()和call()方法實(shí)現(xiàn)。
apple()和call()都允許傳遞指定某個(gè)對(duì)象的this。對(duì)于繼承來(lái)講,可以試想子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)時(shí),講子對(duì)象的this和父對(duì)象的this綁定在一起。
function Fun (){ this.color = "藍(lán)" } function Fn(){ Fun.call(this); } var result = new Fn result.color;//藍(lán)組合方式繼承
組合繼承,也叫做偽經(jīng)典繼承,指的是將原型鏈或原型式繼承和借助構(gòu)造函數(shù)的技術(shù)組合在一起,發(fā)揮二者的長(zhǎng)處的一種繼承方式。
使用原型鏈或原型式繼承實(shí)現(xiàn)對(duì)原型的屬性和方法的繼承。
通過借助構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)實(shí)例對(duì)象的屬性的集成。
function Fun (name){ this name = name; } Fun.prototype.sayname = function(){ console.log(this.name); } function Fn (name,age){ Fun.call(this.name);//繼承屬性 this.age = age; } Fn.prototype = Fun.prototype;集成方法獲取Date()對(duì)象
var d1 = new Date();// 構(gòu)造函數(shù) var d2 = Date();// 函數(shù) console.log(d1); console.log(d2); var d3 = new Date; console.log(d3);獲取日期
var d = new Date(); console.log(d.getDate());// 17 console.log(d.getDay());// 5 console.log(d.getFullYear());// 2018 console.log(d.getYear());// 118 - 表示距離1900年的年份 // 獲取當(dāng)前時(shí)間的毫秒數(shù) console.log(d.getMilliseconds()); // 獲取毫秒數(shù) - 距離1970-1-1 0點(diǎn)0分 console.log(d.getTime()); /* 毫秒數(shù)的實(shí)際應(yīng)用: 1.將毫秒數(shù)作為標(biāo)識(shí)(ID) 2.將毫秒數(shù)作為時(shí)間戳 */Math類型
// 不能創(chuàng)建對(duì)象 - TypeError: Math is not a constructor // var m = new Math(); // console.log(m); console.log(Math.PI); console.log(Math.floor(6.5));// 6 console.log(Math.max(4,8));// 8 var arr = [3,1,6,8,25]; console.log(Math.max.apply(null,arr));// 25 // 生成隨機(jī)數(shù) - 只能生成 0 ~ 1 之間的隨機(jī)數(shù) console.log(Math.random()); // 生成 0 ~ 100 之間的隨機(jī)數(shù) console.log(Math.random() * 100); // 生成 1 ~ 100 之間的隨機(jī)數(shù) console.log(Math.random() * 99 + 1);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108357.html
摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實(shí)現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應(yīng)該知道,JavaScript是一門基于原型鏈的語(yǔ)言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說,所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實(shí)例對(duì)象 要搞清楚如何在JavaScript中實(shí)現(xiàn)繼承,...
摘要:中的繼承并不是明確規(guī)定的,而是通過模仿實(shí)現(xiàn)的。繼承中的繼承又稱模擬類繼承。將函數(shù)抽離到全局對(duì)象中,函數(shù)內(nèi)部直接通過作用域鏈查找函數(shù)。這種范式編程是基于作用域鏈,與前面講的繼承是基于原型鏈的本質(zhì)區(qū)別是屬性查找方式的不同。 這一節(jié)梳理對(duì)象的繼承。 我們主要使用繼承來(lái)實(shí)現(xiàn)代碼的抽象和代碼的復(fù)用,在應(yīng)用層實(shí)現(xiàn)功能的封裝。 javascript 的對(duì)象繼承方式真的是百花齊放,屬性繼承、原型繼承、...
摘要:繼承前言作為一門輕量級(jí)的腳本語(yǔ)言在和的橫空出世之后將其推向的新的高度雖然中出現(xiàn)的新的生成對(duì)象的類語(yǔ)法格式但依然為的語(yǔ)法糖而我們依然有必要從的原生實(shí)現(xiàn)入手來(lái)了解它的繼承實(shí)現(xiàn)方式給出了更加簡(jiǎn)潔的固定的類聲明方式有興趣的可以查看阮一峰的入門下面給 javascript繼承 前言 javascript作為一門輕量級(jí)的腳本語(yǔ)言在ES6和node.js的橫空出世之后將其推向的新的高度,雖然 ES6...
摘要:我們有了構(gòu)造函數(shù)之后,第二步開始使用它構(gòu)造一個(gè)函數(shù)。來(lái)個(gè)例子這種方式很簡(jiǎn)單也很直接,你在構(gòu)造函數(shù)的原型上定義方法,那么用該構(gòu)造函數(shù)實(shí)例化出來(lái)的對(duì)象都可以通過原型繼承鏈訪問到定義在構(gòu)造函數(shù)原型上的方法。 來(lái)源: 個(gè)人博客 白話解釋 Javascript 原型繼承(prototype inheritance) 什么是繼承? 學(xué)過面向?qū)ο蟮耐瑢W(xué)們是否還記得,老師整天掛在嘴邊的面向?qū)ο笕筇?..
摘要:和構(gòu)造函數(shù)前面提到,是個(gè)內(nèi)置隱藏屬性,雖然在可以通過訪問,但是其設(shè)計(jì)本意是不可被讀取和修改的,那么我們?nèi)绾卫迷玩渷?lái)建立繼承關(guān)系提供了關(guān)鍵字。到這兒,思路就清晰了,怎么讓對(duì)象和對(duì)象的相連實(shí)現(xiàn)繼承只需把的構(gòu)造函數(shù)的連接到就行了。 什么是繼承? 大多數(shù)人使用繼承不外乎是為了獲得這兩點(diǎn)好處,代碼的抽象和代碼的復(fù)用。代碼的抽象就不用說了,交通工具和汽車這類的例子數(shù)不勝數(shù),在傳統(tǒng)的OO語(yǔ)言中(...
閱讀 3736·2021-11-17 09:33
閱讀 2760·2021-09-22 15:12
閱讀 3361·2021-08-12 13:24
閱讀 2453·2019-08-30 11:14
閱讀 1745·2019-08-29 14:09
閱讀 1337·2019-08-26 14:01
閱讀 3075·2019-08-26 13:49
閱讀 1790·2019-08-26 12:16