首先创建一个JS对象的两种方法:
一、普通对象(字面式):var person = {name:haha,age:20,getName:function(){return this.name}};
二、函数对象(构造器):function person(name,age){this.name = name,this.age = age}; person.prototype={getAge:function(){return this.age}}; var parents = new person()
区别:
普通对象只有__proto__属性,而函数对象有原型属性prototype,因此普通对象是不可以被继承的,而函数对象是可以被继承的。
__proto__属性:是指向原型对象prototype属性
prototype属性:存在于堆空间中,是一个对象,相当于构造器,构造器里面包含了这个对象的属性和方法,所有由这个对象创建的对象都会继承这个对象的方法
举个例子:var p1 = new person();
p1.getAge()//调用的是person.prototype中的方法。
JS实现继承的方式:原型链
var p = new person(); console.log( p.__proto__ === Person.prototype );//true console.log( Person.prototype.__proto__ === Object.prototype ); //true console.log( Person.__proto__ === Function.prototype );//true
PS:
每次给对象的属性赋值时,都会在原型链中寻找第一个匹配这个属性的对象然后赋值,其余之后的对象会被隐式隐藏掉。