一、原型链
1.构造函数
var Animal = function (name) { this.name = name this.age = ‘22‘ this.run = function () { return name + ‘is running...‘ } } Animal.prototype.go = function () { return this.name + ‘ go‘ } var cat = new Animal(‘cat‘) var dog = new Animal(‘dog‘) // cat 为 Animal 构造的对象 console.log(cat) // {name: ‘cat‘ ....} // cat.__proto__ 指向 Animal.prototype console.log(cat.__proto__) // Animal.prototype console.log(cat.__proto__ === Animal.prototype) // true // cat 的构造器为 Animal console.log(cat.constructor) // Animal // Animal 的原型的构造器为他本身 console.log(Animal.prototype.constructor) // Animal console.log(cat.constructor === Animal.prototype.constructor) // true // 构造器内部属性会为每一个构造对象创建新的属性,不相同,而原型上的属性共用 console.log(cat.run === dog.run) // false console.log(cat.go === dog.go) // true
2.构造函数继承
function A(a) { this.varA = a } // varA并不是在每个实例中都被初始化 A.prototype = { varA: null } // 获取A上的属性 function B(a, b) { A.call(this, a) this.varB = b } // 获取A原型上的属性,并添加B原型属性 B.prototype = Object.create(A.prototype, { varB: { value: null, enumerable: true, configurable: true, writable: true } }) // 将构造器变为自己 B.prototype.constructor = B // 继承完成 var b = new B(‘a‘, ‘b‘) console.log(b) // {varA: ‘a‘, varB: ‘b‘} console.log(b.varA) // ‘a‘ console.log(b.varB) // ‘b‘