博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript 面向对象编程(二)
阅读量:6721 次
发布时间:2019-06-25

本文共 1929 字,大约阅读时间需要 6 分钟。

目的

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

关键字new

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

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

一个图例

图例说明

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

代码说明

function Person(name,age){    this.name = name;    this.age = age  }  var p1 = new Person("p1",12)  var p2 = new Person("p2",22)  p1.__proto__ === Person.prototype  // true  p2.__proto__ === Person.prototype  // true  Person.prototype.constructor === Person; // true复制代码

原型

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

// 构造函数  function Person(name){    this.name = name;  }  // 由Person构造函数创建一个对象  var p1 = new Person("小美")  var p2 = new Person("小李")  Person.prototype.isInstructor = true;  p1.isInstructor; //true  p2.isInstructor; //true // 我们为什么可以访问原型的属性   // __proto__!!复制代码

原型链

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

重构代码

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

function Person(name) {    this.name = name  }  Person.prototype.sayHi = function() {    return "Hi " + this.name  }  var p1 = new Person("dd")  p1.sayHi() // Hi dd复制代码

自我测试

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

测试代码

function Vehicle(make, model,year) {    this.make = make    this.model = model    this.year = year    this.isRunning = false  }  Vehicle.prototype.turnOn = function () {    this.isRunning = true  }  Vehicle.prototype.turnOff = function () {    this.isRunning = false  }  Vehicle.prototype.honk = function () {    if (this.isRunning === true) {      return 'beep'    }  }复制代码

转载地址:http://syjmo.baihongyu.com/

你可能感兴趣的文章
Nginx安装图文
查看>>
解决DataNode启动不起来原因
查看>>
tomcat处理jsp页面的流程
查看>>
fedora的一些使用记录(二)
查看>>
为什么电子人的世界阴盛阳衰?
查看>>
解析InputStream流工具
查看>>
我的友情链接
查看>>
varchar2转clob
查看>>
ansible--循环
查看>>
Jenkins安装部署篇
查看>>
(原创)BFS广度优先算法,看完这篇就够了
查看>>
如何让Ubuntu服务器远离鬼影漏洞(GHOST)影响
查看>>
java反射之动态代理学习笔记
查看>>
ElasticSearch 安装 elasticsearch-analysis-ik分词器
查看>>
清空RMON统计的数据
查看>>
linux 自动化运维之Cobbler
查看>>
tomcat的安装过程
查看>>
python3 Django 报错RuntimeWarning的解决办法
查看>>
【转】sql server 重命名表字段
查看>>
sql server 2008学习之存储过程
查看>>