應用文章原文連結:
https://www.jianshu.com/p/f9792fdd9915
以下為整理後可運作成功的示例代碼,記錄一下
//-------------------------------oop示例代碼 開始
/*
javascript規定,
每一個構造函數都有一個prototype屬性,指向另一個對象。
這個對象的所有屬性和方法,都會被構造函數的執行個體繼承。
這意味着,我們可以把那些不變的屬性和方法,直接定義在prototype對象上。
__proto__是原型鍊,指向執行個體化的函數原型。
*/
//人類
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.run = function(){
console.log('跑路~')
};
Person.prototype.say = function(){
console.log('說話~')
};
console.log("Person的方法"+Person.prototype);
let person=new Person("張三",17);
console.log("person:"+person);
//男人
function Man(name,sex,age){
Person.call(this,name,age);
this.sex = sex;
}
/*
由于:
Man.prototype = Person.prototype;
Man.prototype.yyy = function(){
console.log('嘤嘤嘤');
}
這樣的寫法,因為複雜對象的指派操作是引用而不是指派,
是以會發現Person的prototype也改變了,不能這樣使用,
【要在循環中進行指派,來實作繼承屬性】
*/
// for(var key in Person.prototype){
// Man.prototype[key] = Person.prototype[key];
// console.log(key)
// }
//Man.prototype.constructor=Person.prototype.constructor;//發現構造不能指派?==>需要用中介+call
//是以要用更優的解決方案:【中繼】來做準備工作
function Ready(){}//
Ready.prototype = Person.prototype;//引用
Man.prototype = new Ready();//new 傳回了一個新對象 __proto__指向被執行個體化的構造函數的prototype
Man.prototype.constructor = Man;
console.log(Man.prototype);
Man.prototype.yyy = function(){
console.log('嘤嘤嘤');
}
//.propertype是對象的内部方法,不能用JSON.stringify()檢視其輸出結果,隻能debug看
console.log("Man的方法:"+Man.prototype);
console.log("被Man繼承後的Person的方法:"+Person.prototype);
//通過new 關鍵字建立對象的執行個體
var xm = new Man("小明","女",18);
xm.yyy();
console.log(xm);
console.log(xm.sex);
console.log(xm.name);
//-------------------------------oop示例代碼 結束