- OOP 指什么拭嫁?有哪些特性
OOP
是Object Oriented Programming 縮寫可免,面向?qū)ο缶幊蹋?br>
是目前主流的編程范式。
核心思想:將真實世界上的各種復(fù)雜關(guān)系做粤,抽象成一個個對象浇借, 然后由對象之間的分工與合作, 完成對真實世界的模擬怕品。
三大特性:封裝 繼承 多態(tài)
function Person(){
this.name=name;
this.age=age;
this.sayHello=function(){
console.log('hello '+this.name)
}
}
Person.prototype.bind=function(){ //還可以 后續(xù)給函數(shù)添加字段或方法
console.log(this.name+'早啊')
}
function People(){
this.sayHello=function(){
console.log('hello '+this.name)
}
}
var p= new Person() //繼承性: p對象 繼承了類Person的屬性和方法妇垢。 也可以重寫父類的方法和屬性
var p2=new People()
p.sayHello() //封裝性:把一個功能模塊封裝起來,只知道功能接口肉康,可以調(diào)用和傳參闯估,但是你不知道sayHello(){} 里面是實現(xiàn)原理是怎樣的 p對象調(diào)用使用sayHello()
p2.sayHello()
p.bind()
//多態(tài)就是通過對傳遞的參數(shù)判斷來執(zhí)行邏輯,即可實現(xiàn)一種多態(tài)處理機制
下面就是這個例子吼和,通過多態(tài)類涨薪,調(diào)用add運算方式,根據(jù)不同參數(shù)做運算
- 如何通過構(gòu)造函數(shù)的方式創(chuàng)建一個擁有屬性和方法的對象?
function Person(name){
this.name=name;
this.bind=function(){
console.log(this.name)
}
}
p = new Person('teng')
p.name
- prototype 是什么炫乓?有什么特性
prototype 是函數(shù)的內(nèi)置屬性刚夺,在js的面向?qū)ο缶幊躺舷壮螅琾rototype發(fā)揮著強大的作用。
Object.getPrototypeOf() 方法返回一個對象的原型光督。這是獲取原型對象的標準方法阳距。
特性:
prototype 默認指向一個對象,這個對象為原型(prototype)對象结借。 只有 null 除外筐摘,它沒有自己的原型對象。
原型對象 包含定義函數(shù)實例 中可共享的方法和屬性船老。
也就是 將函數(shù)作為構(gòu)造函數(shù)調(diào)用(new)時咖熟,新創(chuàng)建的對象會從 原型對象上繼承屬和方法。
(1)原型對象上的所有屬性和方法柳畔, 都可以被派生對象共享馍管。
也是繼承機制的基本設(shè)計。
(2)原型對象的屬性不是實例對象自身的屬性薪韩。 只要修改原型對象确沸,修改的變動就會立即 體現(xiàn)在 所有的實例對象上
(3)當實例對象本身沒有某個屬性和方法時, 可以到構(gòu)造函數(shù)的prototype屬性指向的對象俘陷,去尋找屬性和方法罗捎。
如果自身本來就有某個屬性或方法時, 不需要去 原型對象中尋找拉盾。
- 畫出如下代碼的原型圖
function People (name){
this.name = name;
this.sayName = function(){
console.log('my name is:' + this.name);
}
}
People.prototype.walk = function(){
console.log(this.name + ' is walking');
}
var p1 = new People('饑人谷');
var p2 = new People('前端');
- 創(chuàng)建一個 Car 對象桨菜,擁有屬性name、color捉偏、status倒得;擁有方法run,stop夭禽,getStatus
//構(gòu)造函數(shù)
var Car= function(name,color,status){
Car.prototype.name=name;
Car.prototype.color=color;
Car.prototype.status=status;
}
//原生
Car.prototype.run=function(){console.log('run')};
Car.prototype.stop= function(){console.log('stop')};
Car.prototype.getStatus=function(){console.log('status')};
car = new Car('tng','red','0');
混合模式 = 原生+ 構(gòu)造函數(shù)