听完面向对象之后感觉还是好多地方需要消化消化。
面向对象的特点:封装、继承、多态
一、原型对象的用途是为每个实例对象存储共享的方法和属性;所有的实例是共享同一个原型对象,因此有别于实例方法或属性,原型对象仅有一份。
在js中,对象在调用一个方法时会首先在自身里寻找是否有该方法,若没有,则去原型链上去寻找,依次层层递进,这里的原型链就是实例对象的proto属性。
构造函数,构造函数里面没有任何语句,也就是说,这个构造函数在执行的时候,不会给创建出来的对象添加任何属性。
function People(){
}
构造函数的原型,我们更改了构造函数的原型,为一个新的对象:
People.prototype = {
name : "考拉",
sex : "男",
age : 18
}
当一个对象被new出来的时候,不仅仅执行了构造函数里面的语句,也会把这个函数的__proto__指向构造函数的prototype。
var xiaoming = new People();
console.log(xiaoming.__proto__);
console.log(xiaoming.__proto__ == People.prototype);
当我们试图访问name、sex、age属性的时候,身上没有。那么就去查找原型,原型身上有,就当做了自己的属性返回了。
console.log(xiaoming.name);
console.log(xiaoming.sex);
console.log(xiaoming.age);