原型链与继承

Posted easty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型链与继承相关的知识,希望对你有一定的参考价值。

  一、原型链

    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‘

 

  

以上是关于原型链与继承的主要内容,如果未能解决你的问题,请参考以下文章

JS原型链与继承别再被问倒了

js 原型链与继承

Js基础知识 - 原型链与继承精彩的讲解

面试必问之原型链与继承以及call/bind/apply

JavaScript难点系列:原型链与继承

instanceof运算符的实质:Java继承链与JavaScript原型链