Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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 为什么在.NET中,此in按钮处理程序引用父级而不是按钮?_Javascript_.net - Fatal编程技术网

Javascript 为什么在.NET中,此in按钮处理程序引用父级而不是按钮?

Javascript 为什么在.NET中,此in按钮处理程序引用父级而不是按钮?,javascript,.net,Javascript,.net,在javascript DOM中,此指的是单击的元素,它似乎比.NET中的逻辑性更强,而.NET中的此指的是父元素。为什么会有这样的选择 按钮也是一个类。如果它是真正的OOP,它会把纽扣当作头等公民。所以这不是一个范例的问题,而是一个实现的问题。我的假设是,MS可能更容易做到这一点,因为物理模块是为父母而存在的,而不是为孩子而存在的 但对我们来说,这是一个遗憾,因为你必须应付这个发件人,这似乎是陌生的按钮,而它是他自己 在C#中,处理程序是表单对象的方法,因此此也引用此对象 但是,我认为您可以使

在javascript DOM中,此指的是单击的元素,它似乎比.NET中的逻辑性更强,而.NET中的
指的是父元素。为什么会有这样的选择


按钮也是一个类。如果它是真正的OOP,它会把纽扣当作头等公民。所以这不是一个范例的问题,而是一个实现的问题。我的假设是,MS可能更容易做到这一点,因为物理模块是为父母而存在的,而不是为孩子而存在的

但对我们来说,这是一个遗憾,因为你必须应付这个发件人,这似乎是陌生的按钮,而它是他自己

在C#中,处理程序是表单对象的方法,因此
也引用此对象


但是,我认为您可以使用处理程序的一个参数来获取与事件相关的元素。

它们是不同的系统和不同的范例

在.NET中,处理程序被传递一个包含对象的“sender”参数。处理程序驻留在表单对象或用户控件中,因此“this”引用该类(如果您执行双击类型的添加处理程序)。如果手动创建处理程序,那么它可以是任何对象(不一定是表单对象)的一部分,“this”将映射到不同的对象。NET事件也不会冒泡或捕获

在DOM中,不会向处理程序传递“sender”参数。但是,“this”指的是对象。在DOM中,事件可以冒泡或捕获


JavaScript的设计者没有理由不能提供“sender”参数,并将“this”映射回包含处理程序的对象。在我看来,这些只是在世界变得更简单的时候做出的历史性选择。

是的。
object source
参数相当于javascript中的
this
。+1表示源代码,但source在js中真的等同于此吗?C#(或VB.Net)是一种面向对象的语言,“this”(或“Me”)表示类的当前实例(尤其是当前页面)。是一种不同的语言,具有不同的范式,驻留在不同的层次上。它们是不可比较的…按钮也是一个类。如果它是真正的OOP,它会把纽扣当作头等公民。这不是一个范例的问题,而是一个对MS来说更容易实现的问题,因为物理模块是为父对象而不是为子对象而存在的。@user310291,你在这里错了。这与OOP无关。NET是面向对象的,这一事实表明它不能将“this”重新映射为指向按钮。“this”始终指向保存充当处理程序的方法的对象。在>99%的情况下,处理程序方法驻留在与按钮不同的对象中。实际上,在很多情况下,按钮都不会有处理自己事件的方法。因此,换句话说,情况正好相反。NET无法将“this”指向该按钮,因为它是OOP。JavaScript可以,因为它不是OOP。”并且在>99%的情况下,处理程序方法驻留在一个与按钮不同的对象中。“这是因为您使用了它们的按钮而不是自定义按钮:)问题总是在于%的其余部分。我知道它是作为发送方传递的:),但如果这是引用button类,则不需要这样做。Sender很奇怪,因为我们在按钮中,而且Sender就像一个外来变量,而它在.NET中是himself,所以所有方法都附加到某个对象上。因此,在任何方法中,“this”仅指拥有该方法的对象。不可能重新定义此行为以将“this”重新映射为指向(例如)发送方对象。这是因为.NET是一个面向对象的系统。另一方面,JavaScript不是一个面向对象的系统。它没有“类”。所有方法都是简单的函数,函数都是简单的对象。它们不必“附加”到某个对象以形成“方法”。因此,JavaScript可以自由地将“this”重新映射到任何方便的地方。因此,对您的问题的简短回答是--.NET无法将“this”更改为指向您的按钮。