2

オブジェクトのプロパティへのアクセスに問題があります。

オブジェクトのプロパティにアクセスできますが、予想とは異なる値を取得します。

これは私が今取り組んでいるコードです。

alertHeading.on('blur', function(){

    var inputtedVal = $(this).val();
    var key = alertMode.val();

    chrome.runtime.getBackgroundPage(function(backgroundPage) {

      var background = backgroundPage.background;

      var alertObject = background.getStorage(key);

      alertObject.heading="aaa";
      alertObject.heading[0]="zero";
      alertObject.heading[1]="one";

      (1)This works fine.
      console.log(alertObject); //outputs Object {heading: "aaa"} 

      (2)These don't work as I expect.
      console.log(alertObject.heading[0]); // outputs a. I'm expecting "zero".
      console.log(alertObject.heading[1]); // outputs a. I'm expecting "one".

    });

  })

「to "alertObject.heading[0]"」と書いた行に設定した値にアクセスするにはどうすればよいですか?

この問題を解決するために私を助けてください。ありがとう!

4

2 に答える 2

1

問題は、文字列を配列として使用していて、文字列に文字にアクセスするためのブラケット構文があることです。これは基本的にあなたがやっていることであり、うまくいきません:

var str = 'hello';
str[0] = 'world';

console.log(str, str[0]); //=> hello h

文字列リテラルは JavaScript の通常のオブジェクトではありません。任意のオブジェクトを配列として使用しようとすると、それらのプロパティにアクセスできますがprototype、そのオブジェクトの に格納されます。繰り返しになりますが、文字列リテラルは通常のオブジェクトではありません。悪い習慣に従って (しないでください)、Stringコンストラクターで文字列を作成すると、数字で始まらないプロパティにアクセスできるようになります。

var str = new String('hello');
str['a'] = 'world'; // or str.a = 'world'

console.log(str, str['a']); //=> hello world

とにかくあなたのロジックは意味がありません.最初に文字列を割り当ててから、配列が必要ですか? あなたは文字列を失った!. これを試して:

alertObject.heading = ['aaa']; // initialize as array
alertObject.heading[1] = 'zero';
alertObject.heading[2] = 'one';

のような配列ができました['aaa', 'zero', 'one']

于 2013-09-14T03:45:37.230 に答える