Angularjs 角度范围是否安全?

Angularjs 角度范围是否安全?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,这条线跟在后面 所以我想知道,如果不是用手工复制属性/方法 这样做安全吗 .factory('MyTest',function(){ return { prop: 'Mytest', myFunc: function(){ alert('Hello'); } } }) .controller('IndexCtrl', function ($scope,M

这条线跟在后面

所以我想知道,如果不是用手工复制属性/方法 这样做安全吗

.factory('MyTest',function(){
        return {
            prop: 'Mytest',
            myFunc: function(){
               alert('Hello'); 
            }
        }
    })
.controller('IndexCtrl', function ($scope,MyTest) {
       angular.extend($scope,MyTest);
       console.log($scope);
    })
更新 当然,它只对财产有效 但如果安全的话,这可能是件好事 找到一种方法将其应用于方法

更新1

这似乎是一个好办法:

 'use strict';
                (function(window, angular, undefined) {
                    'use strict';
                    angular.module('ctrl.parent', [])
                        .controller('ParentController',function (scope) {
                            scope.vocalization = '';
                            scope.vocalize = function () {
                                console.log(scope.vocalization);
                            };
                    });
                })(window, angular);
                angular.module('app',['ctrl.parent'])
                    .controller('ChildCtrl', function($scope,$controller){

                     angular.extend($scope, new $controller('ParentController', {scope:$scope}));
$scope.vocalization = 'BARK BARK';
                });
归功于@marfarma

更新2

我想知道为什么这不起作用

'use strict';
            angular.module('animal', [])
                .factory('Animal',function(){
                    return function(vocalization){
                        return {
                            vocalization:vocalization,
                            vocalize : function () {
                                console.log('vocalize: ' + this.vocalization);
                            }
                        }
                    }
                });    
                angular.module('app', ['animal'])
                    .factory('Dog', function (Animal) {
                        function ngPost() {};
                        ngPost.prototype.status = ['publish','draft'];
                        return angular.extend(Animal('bark bark!'), new ngPost());
                    })
                    .factory('Cat', function (Animal) {
                        return Animal('meeeooooow');
                    })
                .controller('MainCtrl',function($scope,Cat,Dog){
                     $scope.cat = Cat;
                     $scope.dog = Dog;
                     console.log($scope.cat);
                     console.log($scope.dog);
                    //$scope.cat = Cat;
                });
这很有效

.factory('Dog', function (Animal) {
                        function ngDog(){
                            this.prop = 'my prop';
                            this.myMethod = function(){
                                console.log('test');
                            }
                        }
                        return angular.extend(Animal('bark bark!'), new ngDog());
                    })
更新3

很抱歉再次打扰你,但过了一会儿,我想起了 这个帖子我想我的问题被误解了(或者我没有清楚地解释自己),如果我喜欢的话,我真的想知道什么

angular.extend($scope,MyService)
可能是坏习惯/好习惯 这是否违反了oop封装原则? 我是说它闻起来像

MyService.call($scope);
您可能会面临变量和函数冲突


因此……

您可以查看该函数的源代码,看看它是否安全:

function extend(dst) {
  var h = dst.$$hashKey;
  forEach(arguments, function(obj){
    if (obj !== dst) {
      forEach(obj, function(value, key){
        dst[key] = value;
      });
    }
  });

  setHashKey(dst,h);
  return dst;
}

您可以查看函数的源代码,并查看它是否安全:

function extend(dst) {
  var h = dst.$$hashKey;
  forEach(arguments, function(obj){
    if (obj !== dst) {
      forEach(obj, function(value, key){
        dst[key] = value;
      });
    }
  });

  setHashKey(dst,h);
  return dst;
}

对于方法,我们将如何做同样的事情?你能给我一个提示吗?你说的“对方法做同样的事情”是什么意思??使用
extend
将所有属性(以及函数)复制到目标对象。我已经更新了代码。你觉得怎么样?我又更新了代码。为什么使用prototype不起作用?如果你查看源代码,你会看到只有自己的属性被复制。对于方法,我们将如何做同样的事情?你能给我一个提示吗?你说的“对方法做同样的事情”是什么意思??使用
extend
将所有属性(以及函数)复制到目标对象。我已经更新了代码。你觉得怎么样?我又更新了代码。为什么使用prototype不起作用?如果你查看源代码,你会看到只有自己的属性被复制。达斯汀·霍夫曼曾经被问过同样的问题。。。结果不得而知。达斯汀·霍夫曼曾经被问过同样的问题。。。结果不得而知。