JS 模拟类的内部如何才能调用自身方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 模拟类的内部如何才能调用自身方法相关的知识,希望对你有一定的参考价值。

function Test()
Test.prototype.aa = functon(obj) .... ;

Test.prototype.bbb = function(obj)
obj.animate(
"marginLeft":+Hsize+"px",
this.speed,
function()
this.aaa(obj); /*这里要如何处理才能调用 aa 方法?? 目前这样写是错误的。*/

);


参考技术A 定义一个Test的成员变量 var _this = this;
代码如下:

function Test()
Test.prototype.aa = function(obj)alert(123);;
var _this = this;
Test.prototype.bbb = function(obj)
alert("bbb");
bbbb();
function bbbb()
alert("bbbb");
_this.aa();


本回答被提问者和网友采纳
参考技术B this关键字
this代表函数执行时的当前对象。
function Test()
Test.prototype.aa = function(obj)alert(123);;
Test.prototype.bbb = function(obj)
var _this = this;
bbbb();
function bbbb()
alert("bbbb");
_this.aa();



在内部函数bbbb执行的时候,this的指向改变了,变成window对象,所以在之前用一个_this对象存起来.

Javascript在class内使用setTimeout()调用类内部函数 - js class 调用自身

效果

 

代码

<script>
    class AAA {
        delayAndShow ( edObj ) {
            setTimeout(function(){
                edObj.showIntroducerInfo();
            }, 1000);
        }
    
        showIntroducerInfo () {
            alert('delay + alert = success....');
        }
    };
    
    var ob = new AAA();
    ob.delayAndShow( ob );
    
</script>

题外话

用过以下的方法不行,包括:

        //下面用四种方法测试,一个一个轮流测试。
        setTimeout("this.count()",1000);//A:当下面的x.count()调用时会发生错误:对象不支持此属性或方法。
        setTimeout("count()",1000);//B:错误显示:缺少对象
        setTimeout(count,1000);//C:错误显示:'count'未定义
        //下面是第四种 
        var self=this;
        setTimeout(function(){self.count();},1000);//D:正确   ----- 我这里还是不行,奇怪

以上是关于JS 模拟类的内部如何才能调用自身方法的主要内容,如果未能解决你的问题,请参考以下文章

js 函数内部创建的setTimeout调用自身函数

Javascript在class内使用setTimeout()调用类内部函数 - js class 调用自身

PHPUnit:如何通过测试方法模拟内部调用的函数

模拟另一个类方法的内部调用

Grails:我如何模拟被测类的其他方法,这些方法可能在测试期间被内部调用

Python 方法是不是可以检查它是不是已从自身内部调用?