首页 > 编程语言 >javascript对象介绍

javascript对象介绍

时间:2024-10-23 19:46:48浏览次数:3  
标签:console name 对象 javascript 介绍 原型 属性 log

1. 什么是对象?

在 JavaScript 中,对象是一个无序的键值对集合,可以用来存储数据和功能。对象可以包含原始值、函数(方法)以及其他对象,是构建复杂数据结构和实现面向对象编程的基础。

2. 创建对象

2.1 字面量方式

最常见的创建对象的方法是使用对象字面量:

const person = {
    name: "Alice",
    age: 25,
    isStudent: true
};

2.2 构造函数方式

使用构造函数可以创建多个相似对象:

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

const person1 = new Person("Bob", 30);
const person2 = new Person("Charlie", 22);

2.3 Object.create() 方法

通过指定原型对象创建新对象:

const proto = {
    greet: function() {
        console.log(`Hello, my name is ${this.name}`);
    }
};

const person3 = Object.create(proto);
person3.name = "David";
person3.greet(); // 输出: Hello, my name is David

3. 访问对象属性

3.1 点语法

使用点号 (.) 来访问属性:

console.log(person.name); // 输出: Alice

3.2 方括号语法

使用方括号 ([]) 访问属性,适用于动态属性名:

console.log(person['age']); // 输出: 25

4. 修改对象属性

你可以直接修改对象的属性值:

person.age = 26; // 修改属性
console.log(person.age); // 输出: 26

person.isStudent = false; // 添加新属性
console.log(person.isStudent); // 输出: false

5. 删除对象属性

使用 delete 操作符删除属性:

delete person.isStudent; // 删除属性
console.log(person.isStudent); // 输出: undefined

6. 遍历对象属性

6.1 for…in 循环

可以使用 for…in 遍历对象的所有可枚举属性:

for (let key in person) {
    console.log(`${key}: ${person[key]}`);
}

6.2 Object.keys()

获取对象的所有属性名:

const keys = Object.keys(person);
console.log(keys); // 输出: ["name", "age"]

6.3 Object.values()

获取对象的所有属性值:

const values = Object.values(person);
console.log(values); // 输出: ["Alice", 26]

6.4 Object.entries()

获取对象的所有键值对:

const entries = Object.entries(person);
console.log(entries); // 输出: [["name", "Alice"], ["age", 26]]

7. 对象方法

对象可以包含方法,这是将数据和功能结合的一个重要特点:

const calculator = {
    add: function(x, y) {
        return x + y;
    },
    subtract: function(x, y) {
        return x - y;
    }
};

console.log(calculator.add(5, 3)); // 输出: 8
console.log(calculator.subtract(5, 3)); // 输出: 2

8. 继承与原型链

JavaScript 中的继承通常通过原型链实现:

8.1 创建原型

首先定义一个动物类,然后定义狗类继承自动物类:

function Animal(name) {
    this.name = name;
}

Animal.prototype.speak = function() {
    console.log(`${this.name} makes a noise.`);
};

function Dog(name) {
    Animal.call(this, name); // 继承属性
}

// 继承方法
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

const dog = new Dog("Rex");
dog.speak(); // 输出: Rex makes a noise.

8.2 使用 class 语法

ES6 引入了 class 语法,使得继承的定义更加简洁:

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const dog2 = new Dog("Max");
dog2.speak(); // 输出: Max barks.

8.3 原型链

1. 什么是原型链?

在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]],指向另一个对象(即它的原型)。通过这个原型,对象可以访问其原型对象上的属性和方法。当试图访问一个对象的属性时,JavaScript
首先会查找该对象本身是否有该属性。如果没有,它会查找对象的原型,直到找到该属性或到达原型链的末尾(通常是 null)。

2. 原型链的基本概念
构造函数:通过构造函数创建对象时,所有实例对象都共享构造函数的原型。
prototype 属性:每个函数都有一个 prototype 属性,它指向一个对象,该对象包含所有实例共享的属性和方法。
proto 属性:这是每个对象的一个隐式属性,指向它的原型。
3. 原型链的工作原理
当你访问一个对象的属性时,JavaScript 引擎会按照以下步骤执行:
检查对象本身是否有该属性。
如果没有,检查对象的原型。
如果仍然没有,查找原型的原型(即上一级原型)。
持续查找,直到找到属性或到达原型链的终点(即 null)。
4. 创建原型链的示例
以下示例展示了如何通过原型链来实现继承:

// 定义一个构造函数
function Animal(name) {
    this.name = name;
}

// 在原型上定义方法
Animal.prototype.speak = function() {
    console.log(`${this.name} makes a noise.`);
};

// 定义一个 Dog 构造函数
function Dog(name) {
    Animal.call(this, name); // 继承属性
}

// 设置 Dog 的原型为 Animal 的实例
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// 重写 Dog 的 speak 方法
Dog.prototype.speak = function() {
    console.log(`${this.name} barks.`);
};

// 创建实例
const dog = new Dog('Rex');
dog.speak(); // 输出: Rex barks.

5. 检查原型链
你可以使用 instanceof 和 isPrototypeOf 来检查对象与原型之间的关系:

console.log(dog instanceof Dog); // 输出: true
console.log(dog instanceof Animal); // 输出: true
console.log(Animal.prototype.isPrototypeOf(dog)); // 输出: true

6. 原型链的优点
代码复用:通过原型链,可以创建共享的方法和属性,减少内存占用。
动态扩展:可以在运行时给原型添加新方法和属性,所有实例都会自动更新。
7. 注意事项
原型链的深度过大可能会导致性能问题,因此要尽量保持原型链的扁平化。
使用 Object.create() 进行原型链的设置可以避免一些常见的陷阱,如共享引用类型的属性(例如数组和对象)。

9. 对象的特殊属性

9.1 this 关键字

在对象方法中,this 关键字指向调用该方法的对象:

const person4 = {
    name: "Eve",
    greet: function() {
        console.log(`Hello, my name is ${this.name}`);
    }
};

person4.greet(); // 输出: Hello, my name is Eve

9.2 闭包与对象

对象中的方法可以形成闭包,保持对外部变量的引用:

function createCounter() {
    let count = 0;
    return {
        increment: function() {
            count++;
            console.log(count);
        },
        decrement: function() {
            count--;
            console.log(count);
        }
    };
}

const counter = createCounter();
counter.increment(); // 输出: 1
counter.increment(); // 输出: 2
counter.decrement(); // 输出: 1

10. 小结

JavaScript 对象是非常强大和灵活的数据结构,可以存储各种类型的数据和方法。掌握对象的创建、访问、修改和遍历等基本操作,对于高效使用 JavaScript 至关重要。在现代开发中,对象广泛用于数据模型、API 响应处理以及复杂应用程序的状态管理等场景。

标签:console,name,对象,javascript,介绍,原型,属性,log
From: https://blog.csdn.net/qq_48763502/article/details/142757342

相关文章

  • javascript数组splice和slice介绍
    一splice1.概述splice是JavaScript数组对象的一个方法,用于改变原数组的内容。它可以添加、删除或替换数组中的元素。2.语法array.splice(start,deleteCount,item1,item2,...)start:需要改变的数组的起始索引。如果是负数,则表示从数组末尾开始计数。de......
  • 【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
    问题描述使用JavaScript通过SDK进行monitor-query的client初始化时候,需要进行认证时报错AADSTS90002。代码如下:constcredential=newDefaultAzureCredential();constlogsQueryClient=newLogsQueryClient(credential,{endpoint:"https://api.loganalytics.azur......
  • UML与面向对象程序设计原则
    UML与面向对象程序设计原则本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;2、理解面向对象程序设计原则。 [实验任务一]:UML复习阅读教材第一章复习UML,回答下述问题:面向对象程序设计中类与类的关系都......
  • vTESTstudio系列14--vTESTstudio中自定义函数介绍1
    在上篇vTESTstudio系列的文章中,我们基于osek_tp.dll实现了诊断的发送和回复的最基本的脚本,但是我们可以看出来,这样的脚本是不具有普适性的,为了生成一个普适性的诊断请求回复的函数,接下来本系列的几篇文章会开始介绍一些优自定义的小函数,Let'sGo!!!目录1.自定义函数:1.1字符......
  • 实验2 类和对象_基础编程1
    实验任务1代码:t.h:1#pragmaonce23#include<string>45classT{6public:7T(intx=0,inty=0);8T(constT&t);9T(T&&t);10~T();11voidadjust(intratio);12voiddisplay()const;13private......
  • 实验2 类和对象_基础编程1
    task1: t.h:#pragmaonce#include<string>//类T:声明classT{//对象属性、方法public:T(intx=0,inty=0);//普通构造函数T(constT&t);//复制构造函数T(T&&t);//移动构造函数~T();//析构函数void......
  • JavaScript:三、数据类型
    JavaScript:三、数据类型JavaScript将数据类型分为两大类,分别是基本数据类型(或称为值类型)和复杂数据类型(或称为引用类型)。值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。引用数据类型(对象类型):对象(Object)、数组(Array)......
  • JavaScript: 二、基本语法
    目录2.1变量以及命名规则2.2变量的声明与赋值2.3声明变量(varletconst)2.3.1Var 2.3.2let2.3.3const2.3.4总结2.1变量以及命名规则变量是程序在内存中申请的一块用来存放数据的空间。变量由变量名和变量值组成,通过变量名可以访问变量的值。命名规则(1)不能......
  • JavaScript中的文件
    裁剪图片原理:借助Canvas,绘制圆形路径,裁剪,填充图片/***@description:裁剪图片变为圆形*@return{Promise}*@param{String}url:普通路径*/exportconstclipImageUrl=(url)=>{returnnewPromise((resolve,reject)=>{letimage=newImage......
  • AI智能分析视频分析网关算法定制智能分析网关V4安全帽检测/反光衣检测/通用工服检测算
    在现代工业和社会活动中,工作场所的安全越来越受到重视。为了确保员工的安全,许多行业都制定了严格的安全规范,其中包括正确佩戴个人防护装备,如安全帽和反光衣。然而,人工监控这些规范的执行情况往往效率低下,且容易出现疏漏。随着人工智能技术的发展,AI智能分析网关应运而生,它通过先进......