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

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

ただいまの
回答率

88.91%

Object.assignと同様の動きをするメソッド

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,569

coko1

score 184

Object.assignを使用してオブジェクトをマージするような処理を組んでいるのですが、Object.assignメソッド使用できない環境でObject.assignと同様の処理(オブジェクトのマージ)を行なうにはどのようにすればよいでしょうか?
お力を貸していただけると助かります。

if(Object.assign){
   //メソッドがある場合
   var arr = {};
   arr = Object.assign(arr, ...sources);
}else{
    //メソッドがない場合
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • TakeoAsai

    2017/05/08 10:50

    babelでトランスパイルする以外の方法で、ということでしょうか?

    キャンセル

  • coko1

    2017/05/08 11:02

    そうなります。ご協力お願いします。

    キャンセル

回答 2

checkベストアンサー

+2

ページを見てみたのですが、使い方がよくわかりませんでした。

Polyfill となるコードを貼り付ければ、そのまま使えます。
ただ、MDNのPolyfillはES3相当で書き方が古いですね。
for-in + hasOwnProperty ではなく、Object.keys  を使用しないと期待通りに動作しないパターンがあります。
http://qiita.com/cocottejs/items/66eef8fef22c0082a15f

Windows Vista(に付属されたIE9)がMSのサポート対象外になった現在では Object.keys を使えないブラウザを考慮する必要はほぼないので Object.keys を積極的に使って良いと思います。
https://www.microsoft.com/japan/msbc/Express/ie_support/

仕様を軽く読んだ限りでは、下記Polyfillが使えそうです。
https://gist.github.com/spiralx/68cf40d7010d829340cb
http://www.ecma-international.org/ecma-262/7.0/#sec-object.assign

Re: coko1 さん

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

polyfillを使うのはダメですか?
Object.assign() - JavaScript | MDN

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/08 12:07 編集

    ページを見てみたのですが、使い方がよくわかりませんでした。
    どのように使用すればよいのでしょうか?
    targetには何を渡せばよいのでしょうか

    キャンセル

  • 2018/09/27 18:16

    npmを使っていれば楽ですが使ってない場合面倒なので

    ```
    function assign(target, varArgs) { // .length of function is 2
    'use strict';
    if (target == null) { // TypeError if undefined or null
    throw new TypeError('Cannot convert undefined or null to object');
    }

    var to = Object(target);

    for (var index = 1; index < arguments.length; index++) {
    var nextSource = arguments[index];

    if (nextSource != null) { // Skip over if undefined or null
    for (var nextKey in nextSource) {
    // Avoid bugs when hasOwnProperty is shadowed
    if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
    to[nextKey] = nextSource[nextKey];
    }
    }
    }
    }
    return to;
    };
    ```

    を定義して
    ```
    assign(arr, ...sources);
    ```
    が楽かもしれないですね

    キャンセル

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る