回答編集履歴

1

Object.getOwnPropertyDescriptor

2019/04/27 05:41

投稿

think49
think49

スコア18162

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