功能调用2次,我预计一次

时间:2016-01-11 13:00:15

标签: angularjs function

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
        <script>
        var app = angular.module( "test", [] );  

        app.run(function () {
            angular.element.prototype.has = function(selector) {
                if ( ! this.length || typeof this === 'undefined' ) return false;
                console.log ( selector );

            };
        });

        app.directive('cacat', function() {
            return {
                restrict: 'E',
                link: function (scope, element, attrs) {
                    var g = element[0].querySelector('span');
                    if ( angular.element(g).length ) {
                        element.has(element.has(g) );
                    }
                }
            };
        });
        </script>
    </head>
    <body ng-app="test">
        <cacat>
            <span>da</span>
        </cacat>      
    </body>
</html>

为什么.has被叫2次?第一次我得到一个好的元素,第二次得到一个未定义的元素,并且它通过了条件。

2 个答案:

答案 0 :(得分:2)

  

element.has(element.has(g) );

这是你的两个电话。我不确定您的预期,但两次调用都会返回undefined,因为它们会通过! this.length || typeof this === 'undefined'测试(其中this指向您的cacat元素,该元素具有非-zero length),除此之外没有返回,因此是一个隐含的undefined返回值。

答案 1 :(得分:0)

您正在调用该方法两次:

element.has(element.has(g));

由于.has()在使用有效元素调用时未返回值,因此您在第二次调用中获得undefined