質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

3回答

1147閲覧

height、widthはどこで定義されているのか

退会済みユーザー

退会済みユーザー

総合スコア0

ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/05/22 00:10

編集2019/05/22 00:11

https://github.com/voxtobox/vue-scroll-stop

こちらのライブラリのソースコードについて理解できない箇所が一点あります。
https://github.com/voxtobox/vue-scroll-stop/blob/master/src/vue-scroll-stop.js

js

1// vue-scroll-stop.js 2 3const onScrolling = function(e) { 4 const { 5 clientHeight: height, // ←ここと 6 clientWidth: width, // ←ここ 7 scrollHeight, 8 scrollWidth, 9 scrollTop, 10 scrollLeft 11 } = elem; 12 let { deltaY = 0 , deltaX = 0 } = getDeltas(e); 13 14 15 if (Math.abs(deltaY) > Math.abs(deltaX)) { 16 if ( 17 (modifiers.v || !modifiers.h) && 18 ((deltaY >= 0 && (scrollHeight - scrollTop) === height) || 19 (deltaY <= 0 && scrollTop === 0)) 20 ) { 21 e.preventDefault(); 22 } 23 } else { 24 if ( 25 (modifiers.h || !modifiers.v) && 26 ((deltaX >= 0 && (scrollWidth - scrollLeft) === width) || 27 (deltaX <= 0 && scrollLeft === 0)) 28 ) { 29 e.preventDefault(); 30 } 31 } 32};

それが上記関数なのですが、

const {
clientHeight: height,
clientWidth: width,
scrollHeight,
scrollWidth,
scrollTop,
scrollLeft
} = elem;

特にここのheight、widthというところがどうゆうことなのか分かりません。
この書き方はes6の書き方ですよね...。
elemがclientWidthとか、clientHeightとかを持つオブジェクトなので、上のような書き方でそれぞれの変数に、オブジェクトのそれぞれの階層の部分だけ入ってくれるわけですよね。

const {
clientHeight,
clientWidth,
scrollHeight,
scrollWidth,
scrollTop,
scrollLeft
} = elem;

これなら分かるのですが...。

heightとかwidthは変数で、初期値みたいな定義ができるのかなって最初思いました。
つまりclientHeightとかclientWidthとかのプロパティがelemに存在しない時はheightとかwidthという変数を代入するみたいな。
ただ、そうだとしてもそれらの変数の定義が見当たらないし、これはどうゆうことなのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

特にここのheight、widthというところがどうゆうことなのか分かりません。

これも分割代入の書き方の1つで、elem.clientHeightheightという変数に代入される、というだけです(MDN)。

投稿2019/05/22 00:22

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/22 00:44

なるほどですありがとうございます、つまり自分の思った clientHeightにheightを代入するというのの、むしろ逆なんですね heightにclientHeightが代入されてるんですね
guest

0

オブジェクトの分割代入では、オブジェクトのプロパティとは異なる名前の変数に代入することができます。
以下ドキュメントの例をそのまま引用します。

var o = {p: 42, q: true}; var {p: foo, q: bar} = o; console.log(foo); // 42 console.log(bar); // true

オブジェクトのプロパティ名としては foobar ですが、分割代入するときにそれらを異なる名前の変数に代入しています。

他にもいろいろな文法があるので、以下ドキュメントを参考にされることをおすすめします。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Assigning_to_new_variable_names

投稿2019/05/22 00:28

krtx

総合スコア121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/22 00:47

理解しました、ありがとうございます ただ慣れるまで違和感がすごいですねこれ笑 そんなことないか...
guest

0

ベストアンサー

異なる名前を持つ変数への代入ですね。

js

1const height = elem.clientHeight; 2const width = elem.clientWidth;

と同じことです。

ちなみに

つまりclientHeightとかclientWidthとかのプロパティがelemに存在しない時はheightとかwidthという変数を代入するみたいな。

これはその直下でやっているこれ↓(既定値の設定)ですね。

js

1let { deltaY = 0 , deltaX = 0 } = getDeltas(e);

投稿2019/05/22 00:26

編集2019/05/22 00:30
de9

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/22 00:45

なるほどです、ありがとうございます しかし右辺に対して代入されるってなんだかすごい不思議な感覚ですね笑
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問