1. 程式人生 > >繼承的實現方式

繼承的實現方式

length pro console 開始 創建 blog 3.1 document not

1.繼承的實現方式

自己沒有的別人有拿過來用,就是繼承

1.1 混入式繼承(mix-in)

var obj={}; var obj1 = { name: "王健林", money: "賺它一個億", makeMoney: function () { console.log("再賺他一個億"); } } // for(var k in obj1){ // obj[k] = obj1[k]; // } // // console.log(obj.money);

1.2. 原型繼承 (要有構造函數)

利用原型實現的繼承效果,就是原型繼承

function Person(){ } var obj1 = { name: "王健林", money: "賺它一個億", makeMoney: function () { console.log("再賺他一個億"); } } var obj=new Person();
1.2.1 利用混入的方式,將要繼承的對象的所有的屬性和方法添加到當前對象的原型中
// for(var k in obj1){ // obj[k] = obj1[k]; // } // // console.log(obj.money);
1.2.2 直接將要繼承的對象作為當前對象的原型!
// Person.prototype = obj1; // var obj = new Person(); // console.log(obj.money);

1.3. 經典繼承

其實經典繼承就是原型繼承的另外一種實現方式! Object.create();
1.3.1 語法: var 對象 = Object.create(要繼承的對象);
1.3.2 功能: Object.create方法,可以用來創建一個對象,這個對象的原型,就是參數中傳遞進去的對象
1.3.3 原理: 其實就是將參數中傳入的對象,作為了新對象的原型!
// var obj = { // name: "朱三輝", // sing: function () { // console.log("我已開始練習,開始慢慢熟悉"); // } // }; // var p = Object.create(obj); // console.log(p.__proto__ === obj); // p.sing();
1.3.4 Object.create方法有兼容性問題!
//解決兼容性問題 //我們自己封裝的快速實現原型繼承(經典繼承)的方式 function myCreate(obj){ if(Object.create){ return Object.create(obj); }else{ function F(){} F.prototype = obj; return new F(); } }

2.繼承的應用(幫所有的數組對象,添加一個方法 sum)

2.1 直接給Array原型添加屬性和方法(最簡單但是不穩妥的解決方案!)

// Array.prototype.sum = function () { // var result = 0; // for(var i = 0; i < this.length; i ++){ // result += this[i]; // } // return result; // } // var arr = [1, 2, 3]; // var result = arr.sum();

2.2 要實現的功能,給所有的數組加上一個sum方法!(安全的擴展內置對象)

function MyArray () { } MyArray.prototype = []; MyArray.prototype.sum = function () { var result = 0; for(var i = 0; i < this.length; i ++){ result += this[i]; } return result; } var arr = new MyArray(); arr.push(1); console.log(arr.sum()); 技術分享圖片

繼承的實現方式