序文
JavaScript言語で、あるいは他の言語の両方のオブジェクトは、非常に重要な概念であります
私の意見では、オブジェクト:
- マクロアップが見てから、実際には、(など人とクルマ、学生、など)具体的な物事の生活の現実に対応
- ミクロが関係しているから、実際には、{}名前と値のペアを保持しています
オブジェクトでは、非常に重要な概念があります:クラス
クラス、実際には、同じ特性を持つすべてのオブジェクトは、組成物のための機能の同じ組み合わせ。
我们可以认为类其实就是一个模板,而对象是基于这个模板所创建出来的实例。
例如 “学生”这个概念我们就可以对应到类这个概念
而“张三”,"李四"这些人的是“学生”这个类的实例对象
JavaScriptでは、それには、JavaScriptの関数はオブジェクトであり、かつ正確にこの機能により、私たちはこのような関数の実行にパラメータとして、コールバック、閉鎖、意志機能などの高度な操作機能を、実現することが可能と組み込み変数のすべてが(オブジェクトであるということができます)
オブジェクトのプロパティ
JavaScriptでは、オブジェクトのプロパティをすることができ、動的に追加および削除します。
-
私たちは、値= [ATTR] OBJとして使用する属性名に対応する属性の属性値を追加または変更することができます
如果在使用该语句前obj上已经有attr这个属性名了,那么就会修改obj[attr]的值 如果obj上没有该属性名,则会添加该属性
-
我々は使用することができ、削除オブジェクトのプロパティに属性名の対応を削除するには、キーを
// 示例代码 // 创建测试样例 var obj = { "a":"hello a", [Symbol("b")]:"hello b" } // {a: "hello a", Symbol(b): "hello b"} console.log(obj); // 删除obj上属性名名为a的属性 delete obj.a // {Symbol(b): "hello b"} console.log(obj);
-
私たちは、JavaScriptが組み込みオブジェクトのDefinePropertyオブジェクトにプロパティを追加するための方法および詳細な構成オブジェクトを使用することができます
var obj = {}; // 使用方法,为obj实例对象添加属性名为a的属性 Object.defineProperty(obj,"a",{ get:function(){ return "hello a" }, set:function(newValue){ this.a = newValue; } }) // 输出 hello a console.log(obj.a);
在这里要说一下,在使用Object.defineProperty方法时第三个参数是一个关于属性的描述对象
在JavaScript中,存在着一个叫做属性描述符的概念,该概念是用于描述属性用的
属性描述符有两种:
1. 数据描述符(描述该属性是否可修改,是否可以重新配置,是否可以变for...of遍历到,默认值为多少)
2. 存取描述符(描述在读取或修改该属性时应该怎么做)
ここでは具体的な記述、特定のコンテンツを作ることではない、をクリックしてくださいこのリンク
オブジェクトの属性名
JavaScriptでは、標準ECMAScript6に従って、オブジェクトのプロパティ名は、2つのタイプを持つことができます
- 文字列リテラル
- オブジェクトのシンボルインスタンス(クラス属性名が存在するプロパティ名の競合を防ぐためです)
次のサンプルコード
// 创建测试对象
var obj = {
"a":"hello a",
[Symbol("b")]:"hello b"
}
/**
* Reflect是ES6的一个新添加的静态对象,不可被实例化
* 该对象的ownKeys方法可以获取参数对象上的所有属性名(包括字符串和Symbol实例对象,但不包括其原型链上的属性)
*/
Reflect.ownKeys(obj).forEach((item)=>{
// 打印obj对象上属性名对应的属性值
console.log(obj[item]);
})
オブジェクトの属性値
JavaScriptでは、オブジェクトの属性値は以下のものを持つことができます
- 基本データ型(文字列、数値、ブール値、ヌル、未定義)
- リファレンスデータ型(オブジェクト、目的球、配列、セット、地図、プロキシ、シンボル、...)
私たちは、オブジェクトの属性値がの取得に対応する属性値によって属性の名前で取得します
在这里,要说两个概念:属性和方法
对象是由一系列的key-value组成的无序序列。
而根据value类型的不同(或许也可以说是属性使用的目的不同)将key-value可划分为属性和方法
一般来说,属性中的属性名对应的属性值是类型非函数
而,方法中的属性名对应的属性值一般是函数
属性是用于描述该对象的一些特征
而方法是该对象所可以做出的一些行为
ここでは、例です。
var obj = {
// 这是属性,用于描述对象的一些特征
"attr": "This is attr",
// 这是方法,是对象可以做出的一些行为
"method": function () {
console.log(this);
}
}
オブジェクト属性をトラバース
JavaScriptでは、トラバースオブジェクトの属性は次の方法があります
-
中のため
该方法会循环遍历对象自身和继承的可枚举属性,不包括Symbol属性
-
Object.keys()
该方法返回一个属性名的数值(包括对象自身的但不含继承的所有可枚举属性,也不包括Symbol属性)
-
Object.getOwnPropertyNames()
该方法返回一个属性名数值(包括对象自身的所有属性,不包含Symbol属性,但是包括不可枚举属性)
-
Reflect.ownKeys()
该方法返回一个属性,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举
サンプルコード
var obj = {
// 普通属性
a:"hello a",
// Symbol实例属性
[Symbol("b")]:"hello b"
}
// 给obj的原型对象添加一个属性c
obj.__proto__.c = "hello c"
/**
* hello a
* hello c
*/
for (const key in obj) {
console.log(obj[key]);
}
console.log("-------------------");
/**
* hello a
*/
Object.keys(obj).forEach((key)=>{
console.log(obj[key]);
})
console.log("-------------------");
/**
* hello a
*/
Object.getOwnPropertyNames(obj).forEach((key)=>{
console.log(obj[key]);
})
console.log("-------------------");
/**
* hello a
* hello b
*/
Reflect.ownKeys(obj).forEach((key)=>{
console.log(obj[key]);
})
オブジェクトオブジェクト
JavaScriptでは、組み込みオブジェクトのオブジェクトがあり、私たちが作成したすべてのオブジェクトのプロトタイプは、組み込みオブジェクトを参照してください。
私たちは、オブジェクトを作成するには、次のメソッドを持っています
-
オブジェクトリテラルの作成(推奨)
var obj = {}
-
組み込みオブジェクトオブジェクトに基づいて(推奨されません)
var obj = new Object()
この組み込みオブジェクトでは、我々が作成したオブジェクトは、大きな利便性をもたらす操作するいくつかの非常に実用的な方法は、あります。私たちが作成したオブジェクトの例も、組み込みオブジェクトのメソッドを呼び出すことができます
組み込みオブジェクトの詳細についてはをクリックして参照することができ、リンクここであまり凝っようではありません