跟我学习javascript的prototype使用注意事项

yizhihongxing

当使用JavaScript的面向对象编程时,prototype在实现继承和方法重载等方面起着关键作用。下面是跟我学习JavaScript的prototype使用注意事项的完整攻略。

什么是prototype?

在JavaScript中,每个对象都有一个prototype,原型链的顶端是Object.prototype对象。prototype对象定义了该对象的属性和方法,当在对象内部查找属性和方法时,会先在对象自身查找,如果没有找到,再去prototype对象中查找,甚至可以不断查找到Object.prototype对象。

如何使用prototype?

定义一个对象

假设现在要定义一个对象Man,该对象具备以下属性和方法:

  • name:姓名
  • age:年龄
  • sayHello:打招呼方法

可以使用以下方式定义:

function Man(name, age) {
  this.name = name;
  this.age = age;
}

Man.prototype.sayHello = function() {
  console.log("Hello, I'm " + this.name + ", " + this.age + " years old.");
}

创建一个对象

假设现在需要创建一个name为Tom,age为18岁的Man对象,可以使用如下方式创建:

var tom = new Man('Tom', 18);
tom.sayHello(); // Hello, I'm Tom, 18 years old.

继承一个对象

如果需要从一个已有的对象中创建一个新的对象,并且新对象需要调用原有对象的方法,可以使用prototype实现继承:

function Student(name, age, grade) {
  Man.call(this, name, age);
  this.grade = grade;
}

Student.prototype = Object.create(Man.prototype);
Student.prototype.constructor = Student;
Student.prototype.sayHello = function() {
  console.log("Hello, I'm " + this.name + ", " + this.age + " years old and I am in grade " + this.grade + ".");
}

两个示例说明

例子1:继承对象的方法重载

假设现在要继承对象Man的sayHello方法,并在新的对象中重载sayHello方法。

function Student(name, age, grade) {
  Man.call(this, name, age);
  this.grade = grade;
}

Student.prototype = Object.create(Man.prototype);
Student.prototype.constructor = Student;
Student.prototype.sayHello = function() {
  console.log("Hello, I'm " + this.name + ", " + this.age + " years old and I am in grade " + this.grade + ".");
  Man.prototype.sayHello.call(this); // 调用Man的sayHello方法
}

这里重载了Student的sayHello方法,并在方法中先打印出Student的信息,再调用Man的sayHello方法打印出Man的信息。

例子2:在方法中访问对象属性

假设现在要在Man对象的方法中访问Man对象的属性。

function Man(name, age) {
  this.name = name;
  this.age = age;

  this.introduce = function() {
    console.log("My name is " + this.name + ", I am " + this.age + " years old");
  }
}

Man.prototype.run = function() {
  console.log(this.name + " is running"); // 无法访问name属性
}

var tom = new Man('Tom', 20);
tom.introduce(); // My name is Tom, I am 20 years old
tom.run(); // Tom is running

这里在Man对象的方法introduce中成功访问了Man对象的属性,但在Man对象的方法run中无法直接访问name属性。此时,可以使用prototype实现访问Man对象的属性。

function Man(name, age) {
  this.name = name;
  this.age = age;
}

Man.prototype.introduce = function() {
  console.log("My name is " + this.name + ", I am " + this.age + " years old");
}

Man.prototype.run = function() {
  console.log(this.name + " is running");
}

var tom = new Man('Tom', 20);
tom.introduce(); // My name is Tom, I am 20 years old
tom.run(); // Tom is running

这里将introduce和run方法都挂载到prototype对象上,并且在方法中使用this访问对象属性,成功地访问了Man对象的属性。

prototype使用的注意事项

  • prototype中定义的方法和属性可以被所有实例对象共享,所以在prototype中定义的属性和方法要小心,避免影响到其他的实例对象。
  • 继承时需要重置constructor,使其指向当前继承的对象。
  • 不要轻易地修改内置对象的prototype,避免影响到全局的对象。同时,避免在使用第三方框架时修改存在风险。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟我学习javascript的prototype使用注意事项 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 使用HTML编写简单的邮件模版

    下面是“使用HTML编写简单的邮件模版”的完整攻略: 1. 定义邮件模版 在HTML中,可以使用标签与样式定义邮件模版。以下是一个基本的邮件模版示例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>邮件标题…

    css 2023年6月9日
    00
  • CSS定位中Positoin、absolute、Relative的一些研究

    CSS定位中Position、Absolute、Relative的一些研究 Position属性 CSS中的Position属性用于指定元素在文档中的定位方式。它可以取三个值,分别是static、relative和absolute。 static: 默认值。元素按照正常文档流进行排布。 relative: 元素相对于其正常位置进行定位,也就是说,相对于该元素…

    css 2023年6月9日
    00
  • JavaScript实现简单的轮播图效果

    下面是详细讲解“JavaScript实现简单的轮播图效果”的完整攻略。 准备工作 在编写轮播图之前,你需要准备以下工作: HTML 结构:需要一个 HTML 结构,用于展示轮播图,一般是 <ul> 元素下有若干个 <li> 元素,每个 <li> 元素中包含一个轮播图的内容,例如图片或文字。 CSS 样式:需要给 HTML …

    css 2023年6月11日
    00
  • CSS3 :default伪类选择器使用简介

    下面就为大家详细讲解一下CSS3的 :default 伪类选择器的使用简介。 什么是 :default 伪类选择器 首先,我们需要了解 :default 伪类选择器是在哪种情况下使用的。当浏览器加载一个表单页面时,其中的某个表单元素(input、textarea、select等)会被默认设置为被选中状态,这个默认被选中的状态就是 :default 伪类选择器…

    css 2023年6月9日
    00
  • 用CSS遮罩实现过渡效果的示例代码

    下面是“用CSS遮罩实现过渡效果的示例代码”的完整攻略: 一、什么是CSS遮罩? CSS遮罩是一种技术,可以将遮罩层放在页面元素上,以此来实现一些特殊的效果,比如磨砂玻璃效果、蒙版遮罩等。在CSS3中,我们可以使用“mask-image” property来设置遮罩,其支持一些图像和线性渐变的设置。 二、如何使用CSS遮罩实现过渡效果? 使用CSS遮罩实现过…

    css 2023年6月9日
    00
  • 纯CSS3实现的阴影效果

    下面是“纯CSS3实现的阴影效果”的完整攻略: 什么是纯CSS3实现的阴影效果? 纯CSS3实现的阴影效果指的是利用CSS3中的阴影效果来为元素添加一层阴影,从而增强其视觉效果,不需要使用JavaScript或者图片等其他技术实现。CSS3中提供了多种阴影效果的属性,包括 box-shadow、text-shadow、inset等。 如何使用box-shad…

    css 2023年6月9日
    00
  • ASP.NET MVC 使用Bootstrap的方法

    接下来我将详细讲解“ASP.NET MVC 使用Bootstrap的方法”的完整攻略。 什么是Bootstrap Bootstrap是 Twitter 推出的一个开源前端框架,它提供了一系列的CSS、JavaScript 和 HTML 组件,用于快速开发响应式,移动设备优先的Web应用程序。 如何在ASP.NET MVC中使用Bootstrap 使用 ASP…

    css 2023年6月11日
    00
  • 第六章之辅组类与响应式工具

    第六章之辅助类与响应式工具 一、辅助类 辅助类可以简单的理解为一组实用的CSS类,它们可以帮助快速实现常见的布局和样式需求,同时可以使代码更具可读性。Bootstrap提供了一系列的辅助类,这些辅助类可以在HTML标签中任意使用,可以简化页面的HTML结构,也可以提高CSS代码的复用性。 辅助类一般以 . 类名形式出现,例如 .d-none 表示隐藏元素、.…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部