码迷,mamicode.com
首页 > 其他好文 > 详细

原型链与继承

时间:2018-03-02 22:13:38      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:cti   func   构造函数   dog   enum   属性   自己   als   prototype   

  一、原型链

    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‘

 

  

原型链与继承

标签:cti   func   构造函数   dog   enum   属性   自己   als   prototype   

原文地址:https://www.cnblogs.com/Easty/p/8495063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!