学习javascript面向对象 掌握创建对象的9种方式

学习JavaScript面向对象是Web开发中非常重要的一块,能够帮助我们更好的组织和管理JavaScript代码,实现更好的代码复用和模块化开发。在JavaScript中,我们可以使用多种方式来创建对象,本篇攻略将详细介绍9种创建对象的方式,以便大家更好地掌握JavaScript面向对象编程。

1. Object方式

通过Object方式创建对象是最基础的一种方式,可以直接使用new关键字以及Object构造函数创建:

let obj = new Object(); // 或者 let obj = {}
obj.name = "Jack";
obj.age = 18;
console.log(obj); // { name: "Jack", age:18 }

2. 对象字面量方式

对象字面量方式创建对象更加简洁明了,不需要使用new关键字和构造函数,直接使用大括号表示一个对象即可:

let obj = {
  name: "Jack",
  age: 18
};
console.log(obj); // { name: "Jack", age:18 }

3. 工厂方式

工厂方式可以帮助我们批量创建对象,通常会将对象的创建过程封装在一个函数中。通过调用该函数可以轻松地创建多个对象:

function createObj(name, age) {
  let obj = new Object();
  obj.name = name;
  obj.age = age;
  return obj;
}
let obj1 = createObj("Jack", 18);
let obj2 = createObj("Tom", 20);
console.log(obj1); // { name: "Jack", age: 18 }
console.log(obj2); // { name: "Tom", age: 20 }

4. 构造函数方式

使用构造函数创建对象是面向对象编程中最重要的一种方式,通过定义一个构造函数,再使用new关键字调用该函数来创建对象:

function Person(name, age) {
  this.name = name;
  this.age = age;
}
let person = new Person("Jack",18);
console.log(person); //{ name: "Jack", age:18 }

5. 原型方式

使用原型方式可以让我们通过在原型对象中添加属性和方法,实现所有该类型对象之间属性共享和方法共享的效果:

function Person(){}
Person.prototype.name = "Jack";
Person.prototype.age = 18;
Person.prototype.sayHello = function(){
  console.log("Hello!");
}
let person1 = new Person();
let person2 = new Person();
console.log(person1.name); // Jack
console.log(person2.name); // Jack
person1.sayHello(); // Hello!
person2.sayHello(); // Hello!

6. 组合方式

组合方式是结合了构造函数与原型方式两种方式的一种方式,可以同时享受到构造函数方式和原型方式的优点:

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello!");
};
let person1 = new Person("Jack", 18);
let person2 = new Person("Tom", 20);
console.log(person1.name); // Jack
console.log(person2.name); // Tom
person1.sayHello(); // Hello!
person2.sayHello(); // Hello!

7. 动态原型方式

动态原型方式可以让我们通过判断是否已初始化原型对象,实现动态初始化原型对象的效果:

function Person(name, age) {
  this.name = name;
  this.age = age;
  if(typeof Person.prototype.sayHello != "function") { //注意判断条件
    Person.prototype.sayHello = function() {
      console.log("Hello!");
    };
  }
}
let person1 = new Person("Jack", 18);
let person2 = new Person("Tom", 20);
console.log(person1.name); // Jack
console.log(person2.name);// Tom 
person1.sayHello(); // Hello!
person2.sayHello(); // Hello!

8. 寄生构造函数方式

使用寄生构造函数方式可以在不改变原始类型的情况下,扩展原始类型的功能,同时可以使用new关键字调用该构造函数:

function Person(name, age) {
  let obj = new Object();
  obj.name = name;
  obj.age = age;
  obj.sayHello = function() {
    console.log("Hello!");
  }
  return obj;
}
let person = new Person("Jack", 18);
console.log(person.name); // Jack
person.sayHello(); // Hello!

9. 稳妥构造函数方式

稳妥构造函数方式创建的对象不会对外暴露任何属性和方法,只能通过定义在函数作用域中的方法访问内部属性:

function Person(name, age) {
  let obj = new Object();
  obj.sayHello = function() {
    console.log("Hello, " + name + "!");
  }
  return obj;
}
let person = Person("Jack", 18);
person.sayHello(); // Hello, Jack!

通过这9种创建对象的方式掌握,相信大家已经对JavaScript面向对象编程有了更加深入的认识。同时,我们也需要结合实际项目需求,综合考虑使用不同的方式来创建对象,以达到最佳的编程效果和最优的程序性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习javascript面向对象 掌握创建对象的9种方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript中array.reduce()数组方法的四种使用实例

    当我们使用JavaScript处理数组时,reduce()是一个非常有用的方法。reduce()方法允许我们通过迭代数组中的每个元素,并将它们组合成单个值来加工整个数组。下面详细来讲解如何使用reduce()方法,其中包括四种使用实例,每种用法都有一条示例。 1. 计算数组中所有元素的总和 const numbers = [1, 2, 3, 4, 5]; c…

    JavaScript 2023年5月27日
    00
  • 详解vue-socket.io使用教程与踩坑记录

    详解vue-socket.io使用教程与踩坑记录 什么是vue-socket.io Vue-socket.io是一个适用于Vue.js的Socket.io插件,使得在Vue.js中使用Socket.io变得非常简单。 安装和使用 安装 在你的项目中,通过npm安装vue-socket.io npm install vue-socket.io –save 引…

    JavaScript 2023年6月11日
    00
  • 前台js改变Session的值(用ajax实现)

    要实现“前台js改变Session的值(用ajax实现)”,我们需要通过以下步骤来实现: 在前台页面中引入jQuery库,因为我们将用它来实现ajax功能。可以使用以下代码实现引入: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js&qu…

    JavaScript 2023年6月10日
    00
  • Javascript String 字符串操作包

    Javascript String 字符串操作包攻略 在Javascript中,String是一种用来表示文字序列的数据类型。String类型的值是由一对双引号或单引号括起来的一串字符。Javascript提供了一系列的字符串操作方法,可以方便地对字符串进行处理。 创建字符串 可以通过以下方式来创建字符串: let str1 = "hello wo…

    JavaScript 2023年5月28日
    00
  • html5指南-7.geolocation结合google maps开发一个小的应用

    下面是关于“HTML5指南-7.geolocation结合google maps开发一个小的应用”的详细攻略: 一、什么是geolocation? Geolocation是HTML5的一个新特性,它能够让我们通过浏览器获取到用户的地理位置信息,以及海拔高度和速度等信息。 二、如何结合google maps开发应用? 如果想要将geolocation和goog…

    JavaScript 2023年6月11日
    00
  • JavaScript中Hoisting详解 (变量提升与函数声明提升)

    下面我会为大家详细讲解JavaScript中Hoisting的完整攻略。 什么是Hoisting Hoisting是指在JavaScript执行过程中,变量、函数声明会被提升到当前作用域的顶部。也就是说,在执行任何操作之前,JavaScript会先处理变量和函数声明的定义。 变量提升 JavaScript中声明变量有三种方式:使用var、let和const。…

    JavaScript 2023年5月28日
    00
  • 跟我学习javascript的全局变量

    下面是详细的攻略。 跟我学习JavaScript的全局变量 什么是全局变量 全局变量就是定义在全局作用域内的变量,可以在代码的任何地方被访问到。无论在哪个函数内或者是代码的外部,我们都可以访问及操作它。 在全局作用域内声明变量 在全局作用域内声明变量有两种方式: 使用var关键字 javascript var globalVar = “This is a g…

    JavaScript 2023年6月10日
    00
  • JavaScript基础之文件上传与下载的实现详解

    JavaScript基础之文件上传与下载的实现详解 一、文件上传 文件上传是我们经常会用到的功能,本节中将讲解使用JavaScript实现文件上传的方法。 1. HTML代码 首先,我们需要编写一个HTML的表单,用于选择文件和提交上传请求。 <form id="upload-form"> <input type=&qu…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部