質問するログイン新規登録

回答編集履歴

1

Object.getOwnPropertyDescriptor

2019/04/27 05:41

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,10 +1,43 @@
1
+ ### jQuery.each()
2
+
3
+ - [jQuery.each() | jQuery API Documentation](https://api.jquery.com/jQuery.each/)
4
+
1
5
  JavaScriptの関数は**Object 型**であり、任意のプロパティを持つことが可能です。
2
6
  例えば、`jQuery.each()` は、`jQuery.each` に代入された関数に過ぎません(静的メソッド)。
3
7
 
8
+ ```JavaScript
4
- - [Utilities | jQuery API Documentation](https://api.jquery.com/category/utilities/)
9
+ jQuery.each = function each () {
10
+ // 処理
11
+ };
12
+ ```
5
13
 
6
- `Array.isArray()` 等と同じ性質を持つと考えると分かりやすいかもしれません。
14
+ ### Array.isArray()
7
15
 
8
16
  - [Array.isArray() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)
9
17
 
18
+ 静的メソッドという観点でいえば、`Array.isArray()` も同じ性質を持ちます。
19
+ ただし、`Array.isArray()` と `jQuery.each()` では、descriptor 値が異なりますので、厳密には異なる動作になります。
20
+
21
+ ```JavaScript
22
+ console.log(Object.getOwnPropertyDescriptor(jQuery, 'each')); // {value: ƒ, writable: true, enumerable: true, configurable: true}
23
+ console.log(Object.getOwnPropertyDescriptor(Array, 'isArray')); // {value: ƒ, writable: true, enumerable: false, configurable: true}
24
+ ```
25
+
26
+ 標準の `Array.isArray()` と同じ挙動にするには、`Object.defineProperty()` で `isArray` プロパティを定義する必要があります。
27
+
28
+ - [Object.defineProperty() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)
29
+
30
+ ```JavaScript
31
+ Object.defineProperty(Array, 'isArray', {
32
+ value: function isArray (arg) {
33
+ // 処理
34
+ },
35
+ writable: true,
36
+ enumerable: false,
37
+ configurable: true
38
+ });
39
+ ```
40
+
41
+ 少々話が脱線しましたが、まずは、jQueryから一歩離れて、任意の関数オブジェクトのプロパティに関数を代入して、挙動を確かめる事をお勧めします。
42
+
10
43
  Re: Xyon さん