Javascript中的对象

在JavaScript中,对象是最重要的数据类型,构成了现代JavaScript的构建块。这些对象与JavaScript的基本数据类型(数字、字符串、布尔值、null、未定义和符号)有很大不同,因为这些基本数据类型都存储一个值(取决于它们的类型)。

null
  • 对象更复杂,每个对象可能包含这些基本数据类型以及引用数据类型的任意组合。
  • 对象是一种引用数据类型。分配了参考值的变量会被指定一个参考或指向该值的指针。该引用或指针指向内存中存储对象的位置。这些变量实际上并不存储值。
  • 粗略地说, JavaScript中的对象可以定义为相关数据的无序集合,基本类型或引用类型,以“键:值”对的形式。 这些键可以是变量或函数,在对象上下文中分别称为属性和方法。

可以使用带有可选属性列表的图括号{…}创建对象。属性是“key:value”对,其中key是字符串(也称为“属性名”),而value可以是任何内容。 为了理解这个相当抽象的定义,让我们来看一个JavaScript对象的例子:

let school = {
    name : "Vivekananda School",
    location : "Delhi",
    established : "1971"
}

在上面的例子中 “名称”、“位置”、“已建立” 都是 “钥匙” “维韦卡南达学校”、“德里”和1971年 分别是这些键的值。

每把钥匙都被称为 属性 物体的形状。JavaScript中的对象也可以有一个作为成员的函数,在这种情况下,它将被称为 方法 那个物体的形状。

让我们看看这样一个例子:

// javascript code demonstrating a simple object
let school = {
name: 'Vivekananda School' ,
location : 'Delhi' ,
established : '1971' ,
displayInfo : function (){
console.log(`${school.name} was established
in ${school.established} at ${school.location}`);
}
}
school.displayInfo();


输出: 图片[1]-Javascript中的对象-yiteyi-C++库

在上面的例子中, “显示信息” 是学校对象的一种方法,用于处理存储在其属性中的对象数据。

JavaScript对象的属性

属性名称可以是字符串或数字。如果属性名称是数字,则必须使用以下“括号符号”访问它们:

let school = {
name: 'Vivekananda School' ,
location : 'Delhi' ,
established : '1971' ,
20 : 1000,
displayInfo : function (){
console.log(`The value of the key 20 is ${school[ '20' ]}`);
}
}
school.displayInfo();


输出: 图片[2]-Javascript中的对象-yiteyi-C++库

但稍后将详细介绍括号符号。

属性名也可以是包含多个空格分隔的单词的字符串。在这种情况下,这些属性名称必须用引号括起来:

let school = {
    "school name" : "Vivekananda School",
}

与作为数字的属性名称一样,它们也必须使用括号表示法进行访问。比如,如果我们想从“Vivekananda学校”获取“Vivekananda”,我们可以这样做:

// bracket notation
let school = {
name: 'Vivekananda School' ,
displayInfo : function (){
console.log(`${school.name.split( ' ' )[0]}`);
}
}
school.displayInfo(); // Vivekananda


输出: 图片[3]-Javascript中的对象-yiteyi-C++库 在上面的代码中,我们使用了括号表示法以及javascript提供的拆分方法,您将在本文中了解这些方法。

继承财产

对象的继承属性是从对象的原型继承的属性,而不是为对象本身定义的属性,即对象的自身属性。要验证某个属性是否为对象自己的属性,可以使用 hasOwnProperty 方法

属性属性 JavaScript中的数据属性有四个属性。

  • 价值: 财产的价值。
  • 可写: 如果为true,则可以更改属性的值
  • 可列举: 如果为true,则该属性可以通过“for in”枚举进行迭代。否则,该属性称为不可枚举。
  • 可配置: 如果为false,则尝试删除属性、将属性更改为访问或属性、或更改其属性(而不是[[Value]],或将[[Writable]]更改为false)将失败。

// hasOwnProperty code in js
const object1 = new Object();
object1.property1 = 42;
console.log(object1.hasOwnProperty( 'property1' )); // true


输出: 图片[4]-Javascript中的对象-yiteyi-C++库

创建对象

创建对象有几种方法或语法。其中一种被称为Object literal语法,我们已经使用过了。除了对象文字语法,JavaScript中的对象还可以使用构造函数、对象构造函数或原型模式创建。

  1. 使用对象文字语法: 对象文字语法使用{…}符号直接初始化对象及其方法/属性。 让我们来看一个使用此方法创建对象的示例:
    var obj = {
        member1 : value1,
        member2 : value2,
    };
    

    这些成员可以是任何东西——字符串、数字、函数、数组甚至其他对象。这样的对象称为对象文字。这与其他创建对象的方法不同,后者涉及使用构造函数、类或原型,下文将对此进行讨论。

  2. 对象构造函数: 在JavaScript中创建对象的另一种方法是使用“对象”构造函数。对象构造函数为给定值创建对象包装器。这与“new”关键字结合使用,允许我们初始化新对象。 例子:

    const school = new Object();
    school.name = 'Vivekanada school' ;
    school.location = 'Delhi' ;
    school.established = 1971;
    school.displayInfo = function (){
    console.log(`${school.name} was established
    in ${school.established} at ${school.location}`);
    }
    school.displayInfo();

    
    

    输出: 图片[5]-Javascript中的对象-yiteyi-C++库

    上面提到的两种方法不太适合需要创建多个同类对象的程序,因为它需要为每个此类对象重复编写上述代码行。为了解决这个问题,我们可以使用JavaScript中的另外两种对象创建方法来显著减少这个负担,如下所述:

  3. 施工人员: 与大多数其他OOP语言一样,JavaScript中的构造函数提供了创建对象的模板。换句话说,它定义了一组属性和方法,这些属性和方法对于使用构造函数初始化的所有对象都是通用的。 让我们来看一个例子:

    function Vehicle(name, maker) {
    this .name = name;
    this .maker = maker;
    }
    let car1 = new Vehicle( 'Fiesta' , 'Ford' );
    let car2 = new Vehicle( 'Santa Fe' , 'Hyundai' )
    console.log(car1.name); // Output: Fiesta
    console.log(car2.name); // Output: Santa Fe

    
    

    输出: 图片[6]-Javascript中的对象-yiteyi-C++库 注意在功能车辆之前使用“new”关键字。在任何函数将其转换为构造函数之前,以这种方式使用“new”关键字。“new Vehicle()”实际上做的是:

    • 它创建一个新对象,并将对象的构造函数属性设置为schools(需要注意的是,此属性是一个特殊的默认属性,不可枚举,无法通过手动设置“constructor:someFunction”属性来更改)。
    • 然后,它设置要使用的对象 Vehicle 函数的prototype对象(JavaScript中的每个函数都会获得一个prototype对象,它最初只是一个空对象,但可以修改。实例化时,该对象将继承其构造函数的prototype对象的所有属性)。
    • 然后在新对象的上下文中调用Vehicle(),这意味着当构造函数(Vehicle())中遇到“this”关键字时,它指的是在第一步中创建的新对象。
    • 完成后,新创建的对象将返回到car1和car2(在上面的示例中)。

    在类内部,可以有名为 constructor() .

    class people {
    constructor()
    {
    this .name = "Adam" ;
    }
    }
    let person1 = new people();
    // Output : Adam
    console.log(person1.name);

    
    

    输出: 图片[7]-Javascript中的对象-yiteyi-C++库 在一个名为的类中有多个函数 constructor() 结果导致了一个错误。

  4. 原型: 另一种创建对象的方法是使用原型。每个JavaScript函数都有一个 prototype 对象属性(默认为空)。方法或属性可以附加到此属性。对原型的详细描述超出了本对象介绍的范围。 但是,您可以熟悉以下使用的基本语法:
    let obj = Object.create(prototype_object, propertiesObject)
              // the second propertiesObject argument is optional
    

    使用该对象的示例。create()方法是:

    let footballers = {
    position: "Striker"
    }
    let footballer1 = Object.create(footballers);
    // Output : Striker
    console.log(footballer1.position);

    
    

    输出: 图片[8]-Javascript中的对象-yiteyi-C++库 在上面的示例中,footballers作为创建对象“footballer1”的原型。

    以这种方式创建的所有对象都从其原型对象继承所有属性和方法。原型可以有原型,那些可以有原型等等。这在JavaScript中称为原型链接。这条链以 Object.prototype 这是所有对象的默认原型回退。默认情况下,Javascript对象从对象继承属性和方法。但这些可能很容易被推翻。还值得注意的是,默认原型并不总是对象。原型例如,字符串和数组有自己的默认原型——字符串。原型和阵列。分别是原型。

访问对象成员

对象成员(属性或方法)可以通过以下方式访问:

  1. 点符号:
    (objectName.memberName)

    let school = {
    name : "Vivekanada" ,
    location : "Delhi" ,
    established : 1971,
    20 : 1000,
    displayinfo : function () {
    console.log(`${school.name} was established
    in ${school.established} at ${school.location}`);
    }
    }
    console.log(school.name);
    console.log(school.established);

    
    

    输出: 图片[9]-Javascript中的对象-yiteyi-C++库

  2. 括号符号:
     objectName["memberName"]

    let school = {
    name : "Vivekanada School" ,
    location : "Delhi" ,
    established : 1995,
    20 : 1000,
    displayinfo : function () {
    document.write(`${school.name} was established
    in ${school.established} at ${school.location}`);
    }
    }
    // Output : Vivekanada School
    console.log(school[ 'name' ]);
    // Output: 1000
    console.log(school[ '20' ]);

    
    

    输出: 图片[10]-Javascript中的对象-yiteyi-C++库

与点符号不同,括号关键字适用于任何字符串组合,包括但不限于多字字符串。 例如:

somePerson.first name // invalid
    somePerson["first name"] // valid

与点表示法不同,括号表示法还可以包含在运行时计算其值的任何表达式变量的结果。 例如:

let key = "first name" somePerson[key] = "Name Surname"

使用点表示法时,不可能进行类似的操作。

迭代对象的所有键

要迭代对象的所有现有可枚举键,我们可以使用 for...in 建筑值得注意的是,这只允许我们访问对象的可枚举属性(回想一下,可枚举是数据属性的四个属性之一)。 例如,从对象继承的属性。原型是不可枚举的。但是,也可以使用 for...in 建筑 例子:

let person = {
gender : "male"
}
var person1 = Object.create(person);
person1.name = "Adam" ;
person1.age = 45;
person1.nationality = "Australian" ;
for (let key in person1) {
// Output : name, age, nationality
// and gender
console.log(key);
}


输出: 图片[11]-Javascript中的对象-yiteyi-C++库

删除属性

要删除对象的属性,我们可以使用 delete 操作人员下面列出了其使用示例:

let obj1 = {
propfirst : "Name"
}
// Output : Name
console.log(obj1.propfirst);
delete obj1.propfirst
// Output : undefined
console.log(obj1.propfirst);


输出: 图片[12]-Javascript中的对象-yiteyi-C++库

需要注意的是,我们不能以这种方式删除继承属性或不可配置属性。 例如:

let obj1 = {
propfirst : "Name"
}
// Output : Name
console.log(obj1.propfirst)
let obj2 = Object.create(obj1);
// Output : Name
console.log(obj2.propfirst);
// Output : true.
console.log( delete obj2.propfirst);
// Surprisingly Note that this will return true
// regardless of whether the deletion was successful
// Output : Name
console.log(obj2.propfirst);


输出: 图片[13]-Javascript中的对象-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享