2016-03-29 5 views
1

を混同が私のコードです:<h1>に私をクリックすると

<div ng-controller="TestController"> 
    <h1 ng-click="click()">{{person.name}}</h1> 
</div> 
<script type="text/javascript"> 
    var app = angular.module('app', []); 
    app.controller('TestController', function ($scope) { 
     var p = $scope.person = { 
      name: 'Br' 
     }; 

     $scope.click = function() { 
      p = {}; 
     } 
    }); 
</script> 

、私はpオブジェクトをリセットするので、私はh1タグに空を期待しています。

私は変数pは同じオブジェクトを指している$scope.personと同じ参照を持っていると思います。

実際にクリックしたときに何も変わらず、$scope.person = {}をリセットした場合に限ります。

なぜ私は期待どおりに動作しませんか?私の考えで何が間違っていますか?

+0

pは単なるポインタです書くことができます。物理的にp = {}はメモリのどこかにオブジェクト{}を作成し、オブジェクトのアドレス「p」に格納します。 –

答えて

6

これはAngularとは関係ありませんが、JavaScriptでオブジェクトを操作する方法です。

p$scope.personは両方ともメモリ内の同じオブジェクトを参照していると言っても間違いありません。あなたはpは、あなたが、p参照新しいオブジェクトを持っているに指していたことをオブジェクトに触れていないp = {}を書くとき

は、しかし、したがってそれはもう$scope.personではありません。

var a = {}; 
var b = a; 
a === b; // true 
b = {}; 
a === b; // false 

あなたはp/$scope.personnameプロパティを削除したい場合は、

delete p.name; // this will also delete $scope.person.name 
+0

私は説明が好きです。非常に明確な –

関連する問題