オブジェクトオブジェクト
12613 ワード
参考資料 https://opentutorials.org/course/743/6578
オブジェクトはオブジェクトを表し、「オブジェクトオブジェクト」は何ですか?
JavaScriptでは、オブジェクトオブジェクトオブジェクトはJavaScript内のすべてのオブジェクトの最上位の親を表します.
JavaではObjectクラスが最上位クラス...JAvascriptを知れば知るほどjavaに似た一面が見えます.
Objectオブジェクトのメソッドは2つあります.
(MDNで確認できます.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
上記の例に示すように、Object.メソッド()、オブジェクト.prototype.メソッド()は、このようなタイプに分けられます.
上記の例のObject.keys(), Object.prototype.TOString()構文を表示します.
.prototype.toString()は、パラメータとして出力するオブジェクトをパラメータとしてオブジェクトオブジェクトに渡すプロパティメソッドではなく、サブオブジェクト(オブジェクトインスタンスを宣言する変数o)からオブジェクトのプロトタイプを継承して使用します(o.toString().
まず対象です.keys()の例では
let o = new Object(); この部分からオブジェクトがコンストラクション関数であることがわかります.
また,JavaScriptでは関数がオブジェクトであるため,property(属性)を持つことができる.
すなわち,Objectという構造関数におけるproperty keysメソッドを呼び出す.
Object.prototype.toString()は、上記の説明を参照してください.
オブジェクトオブジェクトのtoString()メソッドには、次のものがあります.
動作原理は、トップオブジェクトオブジェクトのpropertyであるprototypeのproperty、すなわちtoString()メソッドを呼び出すことである.
オブジェクトオブジェクトは最上位の親オブジェクトであるため、オブジェクトが持つ属性サブオブジェクトはすべて使用できます.
したがって、すべてのオブジェクトで機能を使用する場合は、オブジェクトオブジェクトを展開し、必要な機能を属性としてオブジェクトに追加できます.
たとえば、パラメータとして渡された値をブール型として返されるcontain関数としてオブジェクトに含めるかどうかをすべてのオブジェクトに使用できるようにする場合は、contain関数を属性としてObjectオブジェクトに追加できます.
オブジェクトオブジェクトがすべてのオブジェクト(サブオブジェクト)に影響するためです.
極端な例として、contain関数を任意にオブジェクトに追加すると、~in反復文でオブジェクトが出力され、オブジェクトのプロパティcontainメソッド値が出力されます.
ex)
オブジェクトはオブジェクトを表し、「オブジェクトオブジェクト」は何ですか?
JavaScriptでは、オブジェクトオブジェクトオブジェクトはJavaScript内のすべてのオブジェクトの最上位の親を表します.
JavaではObjectクラスが最上位クラス...JAvascriptを知れば知るほどjavaに似た一面が見えます.
オブジェクト使用時の動作原理
Objectオブジェクトのメソッドは2つあります.
(MDNで確認できます.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
上記の例に示すように、Object.メソッド()、オブジェクト.prototype.メソッド()は、このようなタイプに分けられます.
上記の例のObject.keys(), Object.prototype.TOString()構文を表示します.
<script>
//Object.keys()
let arr = ["a", "b", "c"];
console.log('Object.keys(arr):', Object.keys(arr))
// Object.keys() 는 매개변수로 전달된 객체의 key값만을(value제외) 뽑아낸다.
// 배열도 객체에 해당하고 따라서 Object.keys(arr)의 결과는 배열의 key값인 인덱스 0, 1, 2 가 출력된다.
//-----------------------------------------------------------
//Object.prototype.toString()
let o = new Object();
console.log('o.toString()', o.toString());
// [object Object] 라는 값이 String 타입으로 반환된다. 해당 객체가 Object라는 것.
</script>
最初に見た二人の違いはkeys()は、オブジェクトのプロパティkeysメソッドを呼び出し、オブジェクトをパラメータとして渡します..prototype.toString()は、パラメータとして出力するオブジェクトをパラメータとしてオブジェクトオブジェクトに渡すプロパティメソッドではなく、サブオブジェクト(オブジェクトインスタンスを宣言する変数o)からオブジェクトのプロトタイプを継承して使用します(o.toString().
まず対象です.keys()の例では
let o = new Object(); この部分からオブジェクトがコンストラクション関数であることがわかります.
また,JavaScriptでは関数がオブジェクトであるため,property(属性)を持つことができる.
すなわち,Objectという構造関数におけるproperty keysメソッドを呼び出す.
Object.prototype.toString()は、上記の説明を参照してください.
オブジェクトオブジェクトのtoString()メソッドには、次のものがあります.
動作原理は、トップオブジェクトオブジェクトのpropertyであるprototypeのproperty、すなわちtoString()メソッドを呼び出すことである.
オブジェクトを展開
オブジェクトオブジェクトは最上位の親オブジェクトであるため、オブジェクトが持つ属性サブオブジェクトはすべて使用できます.
したがって、すべてのオブジェクトで機能を使用する場合は、オブジェクトオブジェクトを展開し、必要な機能を属性としてオブジェクトに追加できます.
たとえば、パラメータとして渡された値をブール型として返されるcontain関数としてオブジェクトに含めるかどうかをすべてのオブジェクトに使用できるようにする場合は、contain関数を属性としてObjectオブジェクトに追加できます.
<script>
Object.prototype.contain = function(needle){
for(let name in this) {
if(this[name] === needle){
return true;
}
}
return false;
}
</script>
ただし、拡張オブジェクトは使用できません.オブジェクトオブジェクトがすべてのオブジェクト(サブオブジェクト)に影響するためです.
極端な例として、contain関数を任意にオブジェクトに追加すると、~in反復文でオブジェクトが出力され、オブジェクトのプロパティcontainメソッド値が出力されます.
ex)
<script>
Object.prototype.contain = function(neddle) {
for(var name in this){
if(this[name] === neddle){
return true;
}
}
return false;
}
var o = {'name':'egoing', 'city':'seoul'}
console.log(o.contain('egoing'));
var a = ['egoing','leezche','grapittie'];
console.log(a.contain('leezche'));
for(var name in o){
console.log(name);
}
// name의 value, contain의 value가 출력된다.
</script>
しかし、このようにオブジェクトを拡張しなければならないなら、仕方がないわけではありません.<script>
for(var name in o){
if(o.hasOwnProperty(name))
console.log(name);
}
// name 을 자기자신의 직접 property로 가지는 o 객체의 name 값만 출력된다.
</script>
以上のようにhasOwnPropertyメソッドを使用してオブジェクトが直接所有するpropertyをフィルタリングし、オブジェクトの値に拡張すると除外された値が得られます.Reference
この問題について(オブジェクトオブジェクト), 我々は、より多くの情報をここで見つけました https://velog.io/@hey880/Object-객체テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol