Javascript面向对象编程(二)

目的

  • 理解什么是原型对象
  • 描述和理解proto、原型和构造函数之间的关系。
  • 在原型对象上添加方法和属性,以编写更有效的代码
  • 解释向原型添加方法和属性与构造函数之间的区别
  • 通过prototype对象实现JavaScript中的继承

关键字new

我们之前使用了new关键字来从构造函数中创建对象——让我们回顾一下它的作用

  • 创建一个空对象
  • 将“this”的值赋给该对象
  • 在函数最后添加“return this”
  • 在这些新对象和构造函数的原型属性上创建一个连接(传说中的原型链)
    现在我们专注于第四点,看看原型链到底什什么
    一个图例

图例说明

  • 每一个构造函数都有一个叫做prototype(原型)的属性,原型属性的值时一个对象
  • 这个原型对象有一个叫做constructor的属性,它指向这个构造函数
  • 每次当一个对象用new关键字创建的时候,会产生一个"proto" (原型链),它会把这个对象和构造函数的原型属性连接
  • 每一个构造函数都有一个叫做原型的属性,原型属性的值时一个对象

代码说明

原型

原型的位置:原型被构造函数创建,由所有被该构造函数创建的对象共享!!

我们为什么嘛可以访问原型的属性 proto!!

原型链

JavaScript 中如何找到方法和属性?
图例说明

重构代码

既然我们知道由同一个构造函数创建的对象有一个共享的原型,让我们重构一些代码:

自我测试

  • 创建一个构造函数Vehicle:从这个构造函数创建的每个对象都应该有一个make、model和year属性。每个对象还应该有一个名为isRunning的属性,该属性应该设置为false
  • 从Vehicle构造函数创建的每个对象都应该具有一个名为turnOn的函数,该函数将isRunning属性更改为true
  • 从Vehicle构造函数中创建的每个对象都应该有一个名为turnOff的函数,它将isRunning属性更改为false。
  • 从Vehicle构造函数创建的每个对象都应该有一个名为honk的方法,该方法只在isRunning属性为true时返回字符串“beep”

测试代码

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复