首先,讓咱們瞭解幾個概念,以便更好的理解二者
對象:現實中全部有本身屬性和功能的程序結構咱們都稱之爲對象。
面向對象:用對象結構來表示一個具體事物的咱們稱之爲面向對象。
原型對象:咱們把集中保存同一類型的全部子對象共有成員的父親稱之爲原型對象。
① 全部的對象(方法,方法原型等等)都有本身的__proto__屬性,稱之爲隱式原型,一個對象的__proto__指向該對象的構造函數的原型
ex:
var a={x:1}
var b=Object.create(a);
a.isPrototypeOf(b) //true 用isPropertyOf來檢索一個對象是否是另外一個對象的原型
b.__proto__==a //true
② 方法(Function)也是對象,它比較特殊,它不只有其餘對象的__proto__屬性,還要本身獨有的屬性prototype(原型屬性),
它指向了一個原型對象,而原型對象有一個constructor屬性,指向構造函數,它的__proto__屬性指向它的構造函數的原型對象(prototype)
ex:
function b(){}
b.prototype //{constructor: ƒ}constructor: ƒ b()__proto__: Object 指向原型對象
b.prototype.constructor // ƒ b(){} 原型對象的constructor指向了構造函數
function B(b){函數
this.b=b
}
let b=new B("C")
b.__proto__===B.prototype //true 一個對象的__proto__屬性指向它的構造函數的原型對象
B.__proto__ === Function.prototype //true 一個方法的__proto__指向它的構造函數的原型對象
B.prototype.isPrototypeOf(b) //true 檢索B對象是否是b對象的原型對象
B.prototype.__proto__ === Object.prototype //true
b.__proto__ === b.constructor.prototype //true
B === b.constructor //true
Object.prototype.__proto__; //null
區別:this
1.對象有屬性__proto__,指向該對象的構造函數的原型對象。 2.方法除了有屬性__proto__,還有屬性prototype,prototype指向該方法的原型對象。 注意:Function.prototype.bind方法構造出來的函數是個例外,它沒有prototype屬性