js 物件導向 oop 及繼承方式實現 對比

2021-09-11 21:30:19 字數 3758 閱讀 5934

function person(name) 

person.prototype.printname = function

() var person1 = new person('byron'); //例項化物件

console.log(person1.__proto__); //person

console.log(person1.constructor); //自己試試看會是什麼吧

console.log(person.prototype); //指向原型物件person

var person2 = new person('frank');

複製**

// 建構函式表示方法1

// 不需要new生成例項

function animal (name, energy)

// 建構函式表示方法2

// 需要new生成例項

function animal (name, energy)

const leo = new animal('leo', 7)

const snoop = new animal('snoop', 10)

複製**

// 警告

function animal (name, energy)

this.name = name

this.energy = energy

}// 生成例項

function animal (name, energy)

this.name = name

this.energy = energy

}複製**

function animal (name, energy) 

animal.prototype.eat = function (amount) is eating.`)

this.energy += amount

}animal.prototype.sleep = function (length) is sleeping.`)

this.energy += length

}animal.prototype.play = function (length) is playing.`)

this.energy -= length

}const leo = new animal('leo', 7)

for(let key in leo) . value: $`)

}複製**

for(let key in leo) . value: $`)

}}複製**

function animal (name, energy) 

animal.prototype.eat = function (amount) is eating.`)

this.energy += amount

}animal.prototype.sleep = function (length) is sleeping.`)

this.energy += length

}animal.prototype.play = function (length) is playing.`)

this.energy -= length

}const leo = new animal('leo', 7)

leo.hasownproperty('name') // true

leo.hasownproperty('energy') // true

leo.hasownproperty('eat') // false

leo.hasownproperty('sleep') // false

leo.hasownproperty('play') // false

複製**

function animal (name, energy) 

function

user

() {}

const leo = new animal('leo', 7)

leo instanceof animal // true

leo instanceof user // false

複製**

它接受乙個物件的引數。

object.create = function (objtodelegateto) 

複製**

它建立乙個物件,該物件在失敗的查詢中委託給引數物件。

object.create = function (objtodelegateto) 

fn.prototype = objtodelegateto

return new fn()

}複製**

var obj = 

var objinstance1 = object.create(obj)

var objinstance2 = object.create(obj)

objinstance1.b.push('green')

objinstance2.b // ['red', 'blue', 'green']

// 對於基本型別會重新賦值

如:objinstance1.a = 3

console.log(objinstance1) //

複製**

它返回新建立的物件。

function

animal

() function cat(name, color)

// 將cat的prototype物件指向乙個animal的例項,相當於完全刪除了prototype 物件原先的值,然後賦予乙個新值

cat.prototype = new animal();

// 任何乙個prototype物件都有乙個constructor屬性,指向它的建構函式。

// 如果沒有"cat.prototype = new animal();"這一行,cat.prototype.constructor是指向cat的;

// 加了這一行以後,cat.prototype.constructor指向animal。 

// 顯然會導致繼承鏈的紊亂(cat1明明是用建構函式cat生成的),

// 因此我們必須手動糾正,將cat.prototype物件的constructor值改為cat。

cat.prototype.constructor = cat;

var cat1 = new cat("大毛", "黃色");

// console.log(cat1.species)

console.log(cat1)

複製**

function extend(child, parent) ;

f.prototype = parent.prototype;

child.prototype = new f();

child.prototype.constructor = child;

child.uber = parent.prototype;}  

extend(cat,animal);

var cat1 = new cat("大毛","黃色");

alert(cat1.species); // 動物

複製**

物件導向(基礎oop)之進入繼承

1.繼承的目的雖然是讓子類去擁有父類的成員,但是繼承一定不要亂繼承 不要僅僅是為了去得到某1個類的成員而去繼承.滿足繼承的關係 當滿足is a 的關係的時候,就可以繼承.當子類是1個父類的時候 那麼就可以繼承.student person class student person 麻雀 鳥 汽車 交...

JS物件導向 繼承

參考博文 一 物件導向的繼承 1 解析 在原有物件的基礎上,略作修改,得到乙個新的物件,並且不影響原有物件的功能 2 如何新增繼承 拷貝繼承 屬性 call 方法 for in 繼承 子類不影響父類,子類可以繼承父類的一些功能 復用 屬性的繼承 呼叫父類的構造1函式 call 方法的繼承 for i...

js 物件導向 繼承

繼承 將方法的定義放在建構函式中,每建立乙個新物件,都會重複建立該方法一模一樣的副本,浪費記憶體。解決 如果多個子物件都要使用乙個相同的方法時,應該把這個方法放在一種原型物件中,建構函式中不再包含方法定義。原型物件 乙個型別中,專門為所有子物件集中儲存共有方法的物件。同一型別下多個子物件需要用乙個共...