angular.js - javascript 函数取得调用对象的信息。
巴扎黑
巴扎黑 2017-04-11 13:18:17
[JavaScript讨论组]
function testObject(){
            this.commonFun=function() {
                console.log(arguments.callee.caller);
            }
        }

        (function () {

            function test1() {
                this.test = "test1";
                this.testFun = function () {
                    (new testObject()).commonFun();
                }
            }

            var test1 = new test1();
            test1.testFun();

        }());


        (function () {
            function test2() {
                this.test = "test2";
                this.testFun = function () {
                    (new testObject()).commonFun();
                }
            }

            var test2 = new test2();
            test2.testFun();
        }());

上面的console.log() 打印的调用函数,但我现在想要的是调用对象的信息,如,test1对象调用的返回的是test1的test属性,就是输出 test1,
test2对象调用的返回的是test2的test属性,就是输出 test2

函数commonFun作用是输出调用对象的的某些属性,就像上面的test属性,不能传入参数

巴扎黑
巴扎黑

全部回复(2)
迷茫
function testObject(){                                                              
  console.log('is testObject');                                                     
  this.commonFun=function() {                                                       
    console.log(arguments.callee.caller);                                           
  }                                                                                 
}

commonFun的caller就一直是testObject,你这种调用方法,做不到通过caller来显示更上一层的调用关系。

可以改写成:

function testObject(){                                                              
  console.log('is testObject');                                                     
  this.commonFun=function(arg1) {                                                       
    console.log(arguments.callee.caller);
    console.log(arg1);
  }                                                                                 
}

(function () {                                                                      
                                                                                    
  function test1() {                                                                
    this.test = "test1";                                                                                                                                    
    this.testFun = function () {                                                    
      (new testObject()).commonFun(this.test);                                               
    }                                                                               
  }                                                                                 
                                                                                    
  var test1 = new test1();                                                          
  test1.testFun();                                                                  
                                                                                    
}())
怪我咯

首先,你的设计上就有问题,你callee,caller这些取到的都是函数,不是实例,看下面的例子:


function testObject(){
            this.commonFun=function() {
                console.dir(arguments.callee.caller.caller.qq);
            }
        }

(function () {

    function test1() {
        this.test = "test1";
        this.testFun = function () {
            (new testObject()).commonFun();
        }
            
            this.testFun();
    }
            
    test1.qq = 22; // 只有这样直接给函数添加变量,你上面那种取值方式才能取到值
    var test1 = new test1(); // 再次重复,callee和caller是取函数,不是取实例,所以没办法通过这种取到你的test1这个实例里的test变量     
}());

你的这个需求,用继承来实现是最合乎逻辑的。如果是需要子类去实现,可以用接口的方式。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号