首先,让咱们了解几个概念,以便更好的理解二者
对象:现实中全部有本身属性和功能的程序结构咱们都称之为对象。
面向对象:用对象结构来表示一个具体事物的咱们称之为面向对象。
原型对象:咱们把集中保存同一类型的全部子对象共有成员的父亲称之为原型对象。
① 全部的对象(方法,方法原型等等)都有本身的__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属性