Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中继承类?_Javascript_Jquery - Fatal编程技术网

如何在javascript中继承类?

如何在javascript中继承类?,javascript,jquery,Javascript,Jquery,函数不工作,它没有在“输入”中输入值 身体 <input type="text" class="test"/> <input type="text" class="test1"/> <script type="text/javascript"> var test= new example('test') var test1= new example('test1') test.validate() test1.validate(

函数不工作,它没有在“输入”中输入值

身体

<input type="text" class="test"/>
<input type="text" class="test1"/>
<script type="text/javascript">
    var test= new example('test')
    var test1= new example('test1')
    test.validate()
    test1.validate()
</script>

var test=新示例(“test”)
var test1=新示例('test1')
test.validate()
test1.validate()

您的keyup事件处理程序将具有不同的“this”。您可以使用bind来更正该问题

keyup(function (e){
if(e.keyCode==13) this.code();
}.bind(this))

当您绑定到一个事件时,会调用处理程序,并将“this”关键字设置为触发该事件的对象,而不是创建该事件的对象。

您的keyup事件处理程序将具有不同的“this”。您可以使用bind来更正该问题

keyup(function (e){
if(e.keyCode==13) this.code();
}.bind(this))

当您绑定到一个事件时,会调用处理程序,并将“this”关键字设置为触发事件的对象,而不是创建事件的对象。

说到这一点,javascript有点难以理解

本文对此进行了一些解释 但解决这个问题的一个办法是

function example(id){
    this.code= function(){$('.'+id).val(id)}
    var self = this;
    this.validate= function (){
        $('.'+id).keyup(function (e){
            if(e.keyCode==13) self.code();
        });
    }
}

说到这个,javascript有点难理解

本文对此进行了一些解释 但解决这个问题的一个办法是

function example(id){
    this.code= function(){$('.'+id).val(id)}
    var self = this;
    this.validate= function (){
        $('.'+id).keyup(function (e){
            if(e.keyCode==13) self.code();
        });
    }
}

我认为“example”中的函数将用“undefined”代替“id”。您应该将id存储到函数示例中的某个私有变量中。@mightyport:no,this.code中的函数将继承父函数的作用域,并了解
id
var。您知道
validate()
函数只是注册了一个
keyup
处理程序,并且实际上不执行验证?我认为“example”中的函数将得到“undefined”而不是“id”。您应该将id存储到函数示例中的某个私有变量中。@mightyport:no,this.code中的函数将继承父函数的作用域,并了解
id
var。您知道
validate()
函数只是注册了一个
keyup
处理程序,实际上没有执行验证?还有一件事。将“this”绑定到keyup事件,并将“this”继承到其父函数。如果我的keyup函数是另一个函数,如果我想将“this”继承到父函数,那么如何绑定it@amit-您可以使用类似Petoj的另一个答案的变量来保存“this”-var self=this;--然后在另一个内使用“self”,因为变量可以在作用域链上访问。@lastCoder:我使用setTimeout方法。无需按enter键即可填充值。this.code=setTimeout(function(){$('.+id).val(id)},20)@LastCoder:当我将setTimeout放在函数中时,它正在工作,下面是什么problem@amit-setTimeout的工作方式与事件(如单击或键控)处理程序不同。setTimeout函数中的“this”将是全局作用域(窗口),尽管它仍然可以访问参数变量id--还有一件事。将“this”绑定到keyup事件,并将“this”继承到其父函数。如果我的keyup函数是另一个函数,如果我想将“this”继承到父函数,那么如何绑定it@amit-您可以使用类似Petoj的另一个答案的变量来保存“this”-var self=this;--然后在另一个内使用“self”,因为变量可以在作用域链上访问。@lastCoder:我使用setTimeout方法。无需按enter键即可填充值。this.code=setTimeout(function(){$('.+id).val(id)},20)@LastCoder:当我将setTimeout放在函数中时,它正在工作,下面是什么problem@amit-setTimeout的工作方式与事件(如单击或键控)处理程序不同。setTimeout函数中的“this”将是全局作用域(窗口),尽管它仍然可以访问参数变量id--