面向对象&原型&原型链
1、js对象就是系列key:value的组合,面向对象编程在大部分编程语言中都有所提及,其基本思想是将某个功能看成一个整体(对象)封装在一个对象变量中,通过调用对象的某个方法来启动功能,在用的时候不去考虑这个对象内部的具体实现细节,在实现对象细节的时候也不需去管谁在调用。
2、可通过字面量、通过函数构造和new三种方法来构造一个对象,字面量方法每构造一个对象都需逐个对每个属性赋值,太过繁琐;使用函数构造对象代码如下:
```
function createObj(nick,name){
var obj = {
nick:nick,
name:name,
printName:function(){console.log(this.nick)}
}
return obj
}
var obj2 = createObj('Byron',30)
```
通过调用函数createObj将参数传递给对象之后return出来,并赋值给obj2,实现构造对象;
使用new构造对象相比于上面构造函数则更加简单,思路基本相同,其代码如下:
```
function Person(name){
this.name = name
this.sayName = function(){console.log(this.name)}
}
var p = new Person('hunger')
```
执行过程中主要进行了如下操作:
a、执行new Person时创建了一个空对象,其__proto__指向Person的原型prototype;
b、传递参数 将括号中的参数逐个传递给空对象,该对象获取到函数Person的所有属性和值;
c、该对象返回给p,实现对象p的构造。
3、原型链三大金句:
a、当new一个函数时会生成一个对象,该对象的__proto__指向构造函数的原型prototype;
b、一起函数都是Function构造的,所以任何被构造函数f.__proto__ = Function.prototype;
c、一切函数的原型对象prototype都是由Object构造的,因此任意原型对象.__proto__ = Object.prototype.