我的情况是这样的:我有一些Javascript代码不是我自己写的,但我想熟悉一下(实际上,我想调试它)。特别是,我对这段代码提出的 AJAX 请求以及何时发出的请求很感兴趣。
我正在查看的这段 Javascript 代码非常复杂、冗长且混乱。所以基本上,仅仅阅读源代码或搜索这个或那个函数调用的源代码并不是一个好的选择。我想要的是一些 Firefox 或 Chromium 插件(以适用者为准),它可以执行以下操作:
在加载页面并执行 Javascript 时,我希望它捕获任何发出的 AJAX 请求并告诉我它(最重要的是,正在调用什么 URL,尽管知道什么 POST 参数等正在沿着该请求传送)也有用)。如果它真的在每次执行 AJAX 请求之前停止,告诉我它,并问我是否应该继续,那就太棒了。但即使它什么都不做,我也会很高兴,只是将 Javascript 发送 AJAX 请求的每个 URL 打印到控制台或其他东西。
有什么建议?
注意:这是一个纯粹好奇的问题.我玩得很开心,我遇到了一个我无法完全解释的好奇行为.我不是要解决任何实际问题,也不是多重继承的支持者.;-)
据我所知,在Java中,当一个类从不同的接口继承多个具有相同签名和返回类型的默认方法时,该类通常必须重写该方法并提供自己的实现来解决歧义(覆盖方法可能是明确的)调用默认方法之一InterfaceName.super.foo()).例如,见这里.
但是,如果这些接口仅提供相同的默认方法,因为它们都扩展了相同的超级接口,并且所有接口仅从该超级接口继承该默认方法,则情况并非如此.这对编译器来说很好.只有当其中一些接口使用自己的实现覆盖默认方法时才会引入歧义(在这种情况下,编译器会抱怨).
但是,如果只有一个接口覆盖了默认方法,编译器就会好奇地不抱怨.
例如,以下编译并运行正常:
interface Creature {
default void whoAmI() {
System.out.println("creature");
}
}
interface Horse extends Creature {
}
interface Human extends Creature {
@Override
default void whoAmI() {
System.out.println("human");
}
}
public class Centaur implements Horse, Human {
public static void main(String... args) {
new Centaur().whoAmI(); // prints 'human'
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是human,输出是,而不是creature.(好吧,另一种方式也同样有趣.)我的猜测是编译器不允许这样做,因为方法调用是不明确的.
问:这是预期的行为吗?如果是,理由是什么?(我想有人可能会争辩说,如果只有一个接口覆盖了默认方法,那么应该优先考虑该覆盖).或者只是编译器以某种方式不检测这种"隐藏"歧义并通过将方法调用链接到接口中的重写方法声明来展示一些未定义的行为Human?任何规范的引用都是有利的.:)
我试图得到一个依赖OpenGL 3.3和GLSL 3.3的基于OpenGL的渲染引擎,使用AMD Radeon 6950在Ubuntu 13.10上运行.我想使用开源驱动程序(radeon),它依赖于Mesa来实现OpenGL.Ubuntu 13.10仅提供"开箱即用"的Mesa 9.2(实现OpenGL 3.1).但是,可以从此PPA安装Mesa 10.1(实现OpenGL 3.3),如本主题中所述:
StackOverflow:在Ubuntu 12.04下的HD Graphics 4000上的OpenGL和GLSL 3.3
我使用了与那里解释完全相同的步骤:
1.) Add the PPA Repository
$ sudo add-apt-repository ppa:oibaf/graphics-drivers
2.) Update sources
$ sudo apt-get update
3.) Dist-upgrade (rebuilds many packages)
$ sudo apt-get dist-upgrade
4.) Then I rebooted.
Run Code Online (Sandbox Code Playgroud)
Mesa 10.1已成功安装.但是,glxinfo虽然它现在报告正在使用Mesa 10.1,但仍然只报告OpenGL 3.0(compat配置文件)和OpenGL 3.1(核心配置文件):
$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD CAYMAN
OpenGL core profile version string: …Run Code Online (Sandbox Code Playgroud) 有哪些最早版本的Internet Explorer,Firefox,Chrome,Safari和Opera可以定义window.Worker?
Internet Explorer 10,Firefox,Chrome,Safari和Opera支持Web工作者.
但对我来说这有点模糊.它没有说明所有后一种浏览器的哪些版本都有Web worker.此外,这是否意味着Internet Explorer 9没有Web工作者?
我最近遇到了一个我以前从未见过的jQuery构造.这是一个简化版本:
$([ '1', '2', '3' ]).each( function( index, value ) {
console.log( "index", index, "value", value );
});
Run Code Online (Sandbox Code Playgroud)
这会迭代数组的所有元素[ '1', '2', '3' ].问题是,我习惯看到$(...)与CSS选择器一起使用,但我还没有看到它在新声明的数组上使用,正如在这里所做的那样.它似乎工作(使用Firefox 34和Chromium 39测试).
Q1:我是否理解这相当于
var a = [ '1', '2', '3' ];
for ( var i = 0, value; value = a[i]; i++ ) {
console.log( "index", i, "value", value );
}
Run Code Online (Sandbox Code Playgroud)
如果没有,有什么区别?(除了这声明变量的事实a,i和value).
Q2:就jQuery中的数组迭代而言,我更习惯$.each(不要与$(selector).each上面使用的混淆).以上是否相当于
$.each( [ '1', '2', '3' ], function( index, …Run Code Online (Sandbox Code Playgroud) 假设我有一个Foo可以容纳类型对象的泛型类T.此外,假设我只希望能够使用两种类型之一的对象来实例化类.最后,假设这两种类型的最低公共上限是一个类型,它比我想要允许的那两种类型有更多的子类,所以我不能简单地指定类型参数的上限(如class Foo<T extends Something>) ,因为那时我会允许用除我期望的两种类型之外的其他类型来实例化该类.
为了说明,假设我想只Foo持有一个或一个.最低公共上限是,因此指定上限不会起作用.StringIntegerObject
当然,我可以做一些事情
class Foo<T> {
private T obj;
public Foo(T obj) throws IllegalArgumentException {
if (!(obj instanceof String || obj instanceof Integer)) {
throw new IllegalArgumentException("...");
}
this.obj = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,我仍然可以使用任何对象调用构造函数; 如果我尝试使用既不是a String也不是a的东西来实例化它Integer,我将在运行时获得异常.
我想做得更好.我希望编译器静态地(即,在编译时)推断我只能使用String或者对象来实例化这个类Integer.
我在想这些方面的东西可能会成功:
class Foo<T> {
private T obj;
public Foo(String s) {
this((T) …Run Code Online (Sandbox Code Playgroud) 我有一个相当技术性的问题,涉及接收器参数上下文中的覆盖等效项(JLS 8.4.2 )的定义。
\n\n编辑:发布这个问题后,有关接收器参数的评论中有很多混乱。this许多人似乎认为在下面的代码中命名参数是非法的,因此误解了这个问题。如果您不了解此功能,请参阅https://docs.oracle.com/javase/specs/jls/se9/html/jls-8.html#jls-8.4.1 。也许更容易理解的解释可以在这里找到:http://blog.joda.org/2015/12/explicit-receiver-parameters.html。这个问题技术性很强,针对的是经验丰富的 Java 开发人员,他们熟悉接收器参数并了解 Java 语言规范 (JLS)。
术语覆盖等效定义如下:
\n\n\n\n\n如果满足以下任一条件,则方法的签名
\n\nm1是方法签名的子签名m2:\n
\n\n- \n
m2m1具有与, 或相同的签名- 的签名与的签名的擦除( \xc2\xa74.6
\nm1)相同。m2两个方法签名
\nm1和m2是重写等效的,当且仅当m1是 的子签名m2或者m2是 的子签名m1。
因此,如果我理解正确的话,下面的类中的两个方法不是重写等效的,尽管直观上我期望它们是:
\n\nclass A {\n void foo(A this) { /* ... */ }\n void …Run Code Online (Sandbox Code Playgroud)