JS原型和原型链
构造函数 function Foo(name, age){ this.name = name; this.age = age; this.class = 'class-1'; } var f =new Foo('zhangsan',20); 命名规则:大写字母开头; 那么,在使用new操作符来调用一个构造函数的时候,发生了什么呢?其实很简单,就发生了四件事: var obj ={}; obj.__proto__ = Foo.prototype; Foo.call(obj); return obj; 第一行,创建一个空对象obj。 第二行,将这个空对象的 proto 成员指向了构造函数对象的prototype成员对象,这是最关键的一步,将新生成的对象的 prop 属性赋值为构造函数的prototype属性,使得通过构造函数创建的所有对象可以共享相同的原型。 第三行,将构造函数的作用域赋给新对象,因此Foo函数中的this指向新对象obj,然后再调用Foo函数。于是我们就给obj对象赋值了。 第四行,返回新对象obj。 构造函数 - 扩展 var a = {} 其实是 var a = new Object()的语法糖; var a = [] 其实是 var a = new Array() 的语法糖; function Foo(){...} 其实是 var Foo = new