物件導向的三大特點:多型、繼承、封裝
繼承:乙個型別的物件能夠訪問另外乙個型別的屬性和方法
(函式)類與類之間的關係 類就是眾多例項共有的屬性和方法的乙個抽象
原型物件中的this指向例項
function
person()
var person =
newperson()
;//person只是乙個例項
console.
log(person.age)
;<
/script>
call在給fn傳遞引數的時候,是乙個個的傳遞值的,
>
bind這個方法在ie6
~8下不相容-
call改變this和執行fn函式一起都完成了,而bind只改變,並沒有執行。
function
person
(name, age);}
function
male
(name, age)
function
female
(name, age);}
let male =
newmale
("zhangsan",20
);male.
sayhello()
;<
/script>
//原型:原型物件
//每乙個函式都有乙個prototype屬性,我們把這個屬性叫做原型或者原型物件,原型物件裡的屬性和方法能被例項所訪問。
function
person()
person.prototype.name =
"john"
; person.prototype.age =20;
person.prototype.
sayhello
=function()
;/* let person = new person();
console.log(person.__proto__ == person.prototype); -> true */
function
male()
//通過**實現繼承*************
male.prototype =
newperson()
; console.
log(male.prototype.__proto__ === person.prototype)
;// -> true
let male =
newmale()
; console.
log(male.__proto__ === male.prototype)
; male.
sayhello()
;//首先訪問例項屬性和方法
<
/script>
//屬性放到建構函式裡,方法放到原型物件上
function
person
(name, age)
person.prototype.
sayhello
=function()
;function
male
(name, age)
= person.prototype; 指向一樣
for(
let i in person.prototype)
male.prototype.
sayhi
=function()
;var male =
newmale
("sunguikang",20
);male.
sayhello()
; male.
sayhi()
;var person =
newperson
("john",21
);person.
sayhi()
;// 報錯
/* var obj1 = ;
var obj2 = {};
for(var i in obj1)
console.log(obj2); */
<
/script>
function
person
(name, age)
person.prototype.
sayhello
=function()
;function
male
(name, age)
male.prototype = object.
create
(person.prototype)
; male.prototype.constructor = male;
var male =
newmale
("john",20
);male.
sayhello()
;/* var obj1 = ;
var obj2 = ;
obj2 = object.create(obj1);
console.log(obj2.__proto__ == obj1); */
//male prototype constructor
//male __proto__
.constructor === male
//male.__proto__.constructor === male
<
/script>
//語法糖
class
person
//方法
sayhello()
static
foo()}
// extends 繼承
class
male
extends
person
sayhi()
}static
bar()}
let male =
newmale
("john",20
);male.
sayhi()
; male.
bar();
// → 靜態方法,或者類方法
<
/script>
繼承 ES6的繼承語法
什麼是繼承?繼承是發生在父子級關係中的現象 繼承 是 建構函式 的高階應用 就是兩個互為父子級關係的建構函式的應用 子級建構函式,繼承的是父級建構函式的屬性和方法 常見的繼承操作,分為 es5 的繼承語法 和 es6 的繼承語法 實際專案中一般不會直接使用繼承語法,一般都是通過框架來完成繼承,不用專...
es5繼承與es6繼承
es5中的繼承方式 1.原型鏈繼承 缺點 1.建立例項時無法像父類建構函式傳遞引數 2.因為指定了原型,所以不能實現多繼承 3.父類建構函式上的屬性被所有子類共用,給原型上的屬性賦值會改變其他子類的屬性值 es5 const parent function name,age parent.proto...
ES6 中的繼承
下面的例子是分別使用es5和es6的語法來實現programer類 繼承 person類 1.es5中的繼承實現2.es6中的繼承實現 1.定義個person類 class person 3.獲取名稱的方法 getname 4.定義乙個programer類 並且繼承 person 類 class p...