文章目录

  • 使用构造函数创建多个对象
  • JavaScript this 关键字
  • JavaScript 构造函数的形参
  • 创建对象:构造函数 VS 对象字面量(Object Literal)
  • 在对象中添加属性和方法
  • JavaScript 对象原型
  • JavaScript 内置构造函数
  • 参考文档

    在本教程中,您将借助示例了解 JavaScript 构造函数。
    在 JavaScript 中,构造函数用于创建对象。例如,

// constructor function
function Person () {this.name = 'John',this.age = 23
}// create an object
const person = new Person();

    在上面的例子中,function Person() 是一个对象构造函数。
    要从构造函数创建对象,我们使用 new 关键字。
    注意:将构造函数的第一个字母大写被认为是一个很好的做法。

使用构造函数创建多个对象

    在 JavaScript 中,您可以从构造函数创建多个对象。例如,

// constructor function
function Person () {this.name = 'John',this.age = 23,this.greet = function () {console.log('hello');}
}// create objects
const person1 = new Person();
const person2 = new Person();// access properties
console.log(person1.name);  // John
console.log(person2.name);  // John

    在上面的程序中,使用相同的构造函数创建两个对象。

JavaScript this 关键字

    在 JavaScript 中,当在构造函数中使用 this 关键字时,它指的是创建对象时的对象。例如,

// constructor function
function Person () {this.name = 'John',
}// create object
const person1 = new Person();// access properties
console.log(person1.name);  // John

    因此,当一个对象访问属性时,它可以直接访问属性 person1.name。

JavaScript 构造函数的形参

    您还可以创建带形参的构造函数。例如,

// constructor function
function Person (person_name, person_age, person_gender) {// assigning  parameter values to the calling objectthis.name = person_name,this.age = person_age,this.gender = person_gender,this.greet = function () {return ('Hi' + ' ' + this.name);}
}// creating objects
const person1 = new Person('John', 23, 'male');
const person2 = new Person('Sam', 25, 'female');// accessing properties
console.log(person1.name); // "John"
console.log(person2.name); // "Sam"

    在上面的示例中,我们在创建对象时将实参传递给了构造函数。

const person1 = new Person('John', 23, 'male');
const person2 = new Person('Sam', 25, 'male');

    这允许每个对象具有不同的属性。如上所示,
    console.log(person1.name); 得到 John
    console.log(person2.name); 得到 Sam

创建对象:构造函数 VS 对象字面量(Object Literal)

  • 对象字面量通常用于创建单个对象。如果要创建多个对象,构造函数很有用。例如,
// using object literal
let person = {name: 'Sam'
}
// using constructor function
function Person () {this.name = 'Sam'
}let person1 = new Person();
let person2 = new Person();
  • 从构造函数创建的每个对象都是唯一的。可以具有与构造函数相同的属性,也可以向一个特定对象添加新属性。例如,
// using constructor function
function Person () {this.name = 'Sam'
}let person1 = new Person();
let person2 = new Person();// adding new property to person1
person1.age = 20;

    现在,age 属性是 person1 对象独有的,person2 对象无法使用。
    但是,如果使用对象字面量创建对象,并且使用该对象值定义变量,则变量值的任何更改都将更改原始对象。例如,

// using object lateral
let person = {name: 'Sam'
}console.log(person.name); // Samlet student = person;// changes the property of an object
student.name = 'John';// changes the origins object property
console.log(person.name); // John

    使用对象字面量创建对象时,从该对象派生的任何对象变量都将充当原始对象的克隆。因此,在一个对象中所做的任何更改也会反映在另一个对象中。

在对象中添加属性和方法

    您可以像这样在对象中添加属性或方法:

// constructor function
function Person () {this.name = 'John',this.age = 23
}// creating objects
let person1 = new Person();
let person2 = new Person();// adding property to person1 object
person1.gender = 'male';// adding method to person1 object
person1.greet = function () {console.log('hello');
}person1.greet();   // hello// Error code
// person2 doesn't have greet() method
person2.greet();

    输出

hello
Uncaught TypeError: person2.greet is not a function

    在上面的示例中,person1 对象中添加了一个新属性 gender 和一个新方法 greet()。
    然而,这个新的属性和方法只添加到 person1 中。您无法从 person2 访问 gender 或 greet() 。因此,当我们试图访问 person2.greet(); 时,程序会出错。

JavaScript 对象原型

    还可以使用原型向构造函数添加属性和方法。例如,

// constructor function
function Person () {this.name = 'John',this.age = 23
}// creating objects
let person1 = new Person();
let person2 = new Person();// adding new property to constructor function
Person.prototype.gender = 'Male';console.log(person1.gender); // Male
console.log(person2.gender); // Male

    要了解有关原型的更多信息,请访问JavaScript Prototype。

JavaScript 内置构造函数

    JavaScript 也有内置的构造函数。他们之中有一些是:

let a = new Object();    // A new Object object
let b = new String();    // A new String object
let c = new Number();    // A new Number object
let d = new Boolean();   // A new Boolean object

    在 JavaScript 中,可以通过以下方式将字符串创建为对象:

const name = new String ('John');
console.log(name); // "John"

    在 JavaScript 中,可以通过以下方式将数字创建为对象:

const number = new Number (57);
console.log(number); // 57

    在 JavaScript 中,可以通过以下方式将布尔值创建为对象:

const count = new Boolean(true);
console.log(count); // true

    注意:建议使用基本数据类型,并以正常方式创建它们,例如 const name=‘John’;,const number = 57; 和 const count = true;
    您不应该将字符串、数字和布尔值声明为对象,因为它们会减慢程序的速度。
    注意:在JavaScript中,关键字 class 是在 ES6(ES2015)中引入的,它还允许我们创建对象。class 类似于 JavaScript 中的构造函数。要了解更多信息,请访问 JavaScript 类。

    上一教程 :JS Methods                                          下一教程 :Getter and Setter

参考文档

[1] Parewa Labs Pvt. Ltd. (2022, January 1). Getting Started With JavaScript, from Parewa Labs Pvt. Ltd: https://www.programiz.com/javascript/constructor-function

JavaScript 构造函数相关推荐

  1. javascript构造函数

    我们相约在今天,在今天讨论javascript构造函数,感谢你如约而至 昨天 我们昨天前几天讨论过构造函数constructor,得出了结论 constructor是原型对象上的一个属性,默认指向这个 ...

  2. JavaScript构造函数, 实例和静态成员

    JavaScript构造函数, 实例和静态成员 构造函数 实例成员 静态成员 内置构造函数 引用类型 Object Array 包装类型 String Number 构造函数 构造函数是专门用于创建对 ...

  3. 深入javascript——构造函数和原型对象

    常用的几种对象创建模式 使用new关键字创建 最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! var gf = new Object(); gf.name = &q ...

  4. javascript 构造函数类和原型 prototyp e定义的属性和方法的区别

    1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份 而写在类中的方法,实例化的时候会在 ...

  5. [转]JavaScript构造函数及原型对象

    JavaScript中没有类的概念,所以其在对象创建方面与面向对象语言有所不同. JS中对象可以定义为"无序属性的集合".其属性可以包含基本值,对象以及函数.对象实质上就是一组没有 ...

  6. javascript构造函数继承

    一.传统prototy继承 function Parent() {this.name = "thisIsName"; } Parent.prototype.sayName = fu ...

  7. Javascript 构造函数模式、原型模式

    前两天写完组合继承,打算总结一下原型继承的,不过今天看了一下工厂模式.构造函数模式和原型模式,觉得有必要总结一下以加深印象. ------------------------------------- ...

  8. 【Infragistics教程】在javascript构造函数中创建基本继承

    2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 用javascript创建对象有四种方法.具体如下: 对象作为文本 ...

  9. 【前端】JavaScript构造函数

    文章目录 概念 执行过程 返回值 原型与constructor 继承方式 原型链 其他继承方式(还没写) 参考 概念 在JS中,通过new来实例化对象的函数叫构造函数.实例化对象,也就是初始化一个实例 ...

最新文章

  1. python的基础知识
  2. 计算机安全模式无法进入安全模式,如何解决无法在Windows 10中进入安全模式的问题...
  3. 关于百度网盘限速第三方客户端的提醒
  4. [云炬创业管理笔记]第三章打造优秀创业团队讨论2
  5. dae怎么用草图大师打开_当 to C市场饱和,该怎么用场景化打开新市场?
  6. leetcode43. 字符串相乘
  7. 【转】谈谈c#中异步编程模型的变迁**
  8. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)
  9. Spring Boot基础学习笔记14:实现文件上传功能
  10. matlab freqs函数用法,Matlab freqs 函数
  11. 在WinForm中屏蔽中文输入法
  12. 计算机等级的判断,计算机等级考试一级WPS判断题及答案
  13. 计算机主板提示ahci,映泰主板设置硬盘模式AHCI或IDE的教程
  14. iso镜像添加软件包_ubuntu安装 win7_怎么把自己需要的程序添加到WIN7的原版ISO镜像中? - Win7之家...
  15. JavaScript高级学习(三)
  16. 计算机网络学习记录——模块一 网络互联基础
  17. Java、Python、C++、PHP、JavaScript这5大编程语言,我究竟该选哪个?
  18. Professional Microsoft Office SharePoint Designer 2007
  19. SpringBoot2学习笔记
  20. C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

热门文章

  1. NodeJS 导入包的时候出现的 @types 错误导致程序无法运行
  2. 企业软文营销如何断时间生效满足即时时代
  3. MAC PRO使用心得
  4. 释放pytorch占用的gpu显存_Pytorch 节省显存的训练方法总结
  5. nx12文档服务器端口,NX12 OPEN API在VS2017中配置方法
  6. 共赴技术“狂飙”之旅丨第二届开源云原生开发者日开启预约!
  7. 现代C语言程序设计之数据存储
  8. 滴滴出行“盖亚计划”开放脱敏数据,举办首届信号灯挑战赛|CNCC 2017
  9. 怎么样把网站内链优化与网站外链建设做好呢?
  10. mysql has gone away解决方案