所謂原型式繼承,就是定義一個函數,該函數中建立一個臨時性的構造函數,並將做爲參數傳入的對象做爲這個構造函數的原型,最後返回這個構造函數的實例對象app
function object(o){ dunction F (){ F.prototype = o return new F() }
根據原型式繼承所總結的object()函數實現繼承,以下列代碼:dom
var person ={ name : '花', friends : ['僞','化'] } var result = object(person); result.friends.push('貓'); console.log(result.freends);//僞,化,貓
這種原型式繼承要求必須具備一個對象能夠做爲另外一個對象的基礎。函數
上述原型式繼承,也能夠用Object的create()方法代替自定義的object()函數,從而是想規範化。this
var person = { name : '化' friends : ['僞','花'] } var anotherperson = Object.create(person); anotherperson.friends.push('貓'); console.log(anotherperson.friends);//僞,花,貓
不管是原型鏈仍是原型式繼承,都有相同的問題。要解決這樣的問題,能夠藉助構造函數(也能夠叫作僞造對象或經典繼承)。
這種方式實現很是簡單,就是在子對象的構造函數中調用父對象的構造函數。具體能夠經過調用apply()和call()方法實現。
apple()和call()都容許傳遞指定某個對象的this。對於繼承來說,能夠試想子對象的構造函數中調用父對象的構造函數時,講子對象的this和父對象的this綁定在一塊兒。prototype
function Fun (){ this.color = '藍' } function Fn(){ Fun.call(this); } var result = new Fn result.color;//藍
組合繼承,也叫作僞經典繼承,指的是將原型鏈或原型式繼承和藉助構造函數的技術組合在一塊兒,發揮兩者的長處的一種繼承方式。code
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;集成方法
var d1 = new Date();// 構造函數 var d2 = Date();// 函數 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年的年份 // 獲取當前時間的毫秒數 console.log(d.getMilliseconds()); // 獲取毫秒數 - 距離1970-1-1 0點0分 console.log(d.getTime()); /* 毫秒數的實際應用: 1.將毫秒數做爲標識(ID) 2.將毫秒數做爲時間戳 */
// 不能建立對象 - 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 // 生成隨機數 - 只能生成 0 ~ 1 之間的隨機數 console.log(Math.random()); // 生成 0 ~ 100 之間的隨機數 console.log(Math.random() * 100); // 生成 1 ~ 100 之間的隨機數 console.log(Math.random() * 99 + 1);