簡體   English   中英

使用對象文字表示法設置另一個屬性的屬性值

[英]Using object literal notation to set a property's value in terms of another property

由於嘗試在讀取器對象上定義'scanning'屬性的方式,我在以下代碼中遇到錯誤。

app.controller("turingController", ["$scope", function($scope) {



    $scope.cellArray = []; 

    for( var i=0; i<=999; i++) {

        $scope.cellArray[i] = {

            index: i,

            content: "B",

        };

    };


    $scope.reader = {

        location: 500,

        state: "q1",

        scanning: $scope.cellArray[$scope.reader.location].content
    };

}]);

但是,如果我不使用對象文字表示法來定義“掃描”屬性,它就可以正常工作。 像這樣:

$scope.reader = {

    location: 500,

    state: "q1",

    };

$scope.reader.scanning = $scope.cellArray[$scope.reader.location].content

我意識到我已經解決了問題,但是我仍然想知道為什么它在第一個代碼中不起作用? 提前致謝!

在第一個示例中定義$scope.reader時,還將在定義內調用$scope.reader (實際上是$scope.reader.location )。 此時,您調用$scope.reader.location尚未定義$scope.reader 所以很困惑...

在第二種方法中,首先定義$scope.reader對象,然后一個新的屬性(添加scanning )給它,根據設置在上部分的價值$scope.reader 很好,因為$scope.reader對象現在存在

在為$scope.reader構造對象文字時,您實際上尚未定義$scope.reader -您正在嘗試引用尚不存在的變量。

但是,通過在以后的新代碼中進行設置,已經設置了$scope.reader ,因此您可以毫無問題地引用它。

這是javascript問題,不是angularjs。 直到下一行$scope.reader = {}; location才存在$scope.reader = {}; 完成。

這是沿着這條線:

var A = 100;
var B = A = B; 

//What is the value of B? 
//Does (B = A) execute first, so B = 100? 
//Does (A = B) execute first, so B = undefined?

//answer, B is undefined.

//this is analogy to your case
// var R.A = 100 never happens until R = {} is finished.
// so B = A is undefined
var R = {
  A: 100,
  B: A
};

在賦值之前對表達式求值。 您的聲明是這樣的:

var temp = {
    location: 500,
    state: "q1",
    scanning: $scope.cellArray[$scope.reader.location].content
};
$scope.reader = temp;

因此,在為屬性分配值時,尚未設置$scope.reader

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM