我有一个关于从类使用的事件处理程序内部访问Javascript类成员变量的正确方法的快速问题.例如:
function Map() {
this.x = 0;
this.y = 0;
$("body").mousemove( function(event) {
this.x = event.pageX; // Is not able to access Map's member variable "x"
this.y = event.pageY; // Is not able to access Map's member variable "y"
});
}
Run Code Online (Sandbox Code Playgroud)
事件处理程序中的"this.x"尝试影响触发事件的元素的"x"成员变量,而不是更改"Map"类的成员变量.从事件处理程序中访问"Map"类的成员变量的正确方法是什么?
任何帮助将不胜感激 - 我一直在这个问题上摸不着头脑.
干杯,查理
看起来,对于许多javascript小部件,作者已经有意识地使用微小的变量名称.例如:
// Instead of...
this.mousePositions = new Array();
// they use...
this.mp = new Array();
Run Code Online (Sandbox Code Playgroud)
我的问题是:在减少整体javascript文件请求大小方面,这有多重要?我正在努力向公众发布一个javascript小部件,它在缩小后大约是2.8KB.但是,因为这个插件的主要优点是它的轻量级,是否有人有经验,是否值得通过并切换出我使用这些新的,微小的变量名称的所有敏感变量名称?看起来代码的可读性太低,而且维护起来要困难得多.
谢谢你的帮助!
查理
我在使用GDB调试多线程进程时遇到了一些问题.我有一个多线程进程,分裂成几个(8或9)个不同的线程,我试图确定当调用名为XML_File_Data的类的构造函数时变量的内容是什么.但是,我遇到了一个问题,在我将所有线程应用正确的函数断点后,显然其中一个线程的断点被命中(程序暂时停止执行),我无法确定哪个线程打破了断点.命令
(gdb) thread apply all where
Run Code Online (Sandbox Code Playgroud)
在形式上给我一些令人震惊的无用信息:
#0 0x004ab410 in __kernel_vsyscall ()
#1 0x05268996 in nanosleep () from /lib/libc.so.6
#2 0x052a215c in usleep () from /lib/libc.so.6
#3 0x082ee313 in frame_clock_frame_end (clock=0xb4bfd2f8)
at frame_clock.c:143
#4 0x003a349a in ?? ()
#5 0x00b5cfde in thread_proxy ()
from /cets_development_libraries/install/lib/libboost_thread-gcc41-mt-1_38.so.1.38.0
#6 0x02c1f5ab in start_thread () from /lib/libpthread.so.0
#7 0x052a8cfe in clone () from /lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)
在9个进程中,大约7个正在给我几乎完全相同的输出,并且关于最后2个的信息实际上并没有多大帮助(远离调用堆栈的函数具有可识别的名称,但是最近的#0-#4函数无法识别).
这是我到目前为止:
(gdb) gdb
(gdb) gdb attach <processid>
(gdb) thread apply all 'XML_File_Data::XML_File_Data()'
Run Code Online (Sandbox Code Playgroud)
和(在断点被击中后)
(gdb) thread apply all where
Run Code Online (Sandbox Code Playgroud)
任何经验丰富的调试器能否为我提供一些关于我做错了什么或者在这种情况下通常做什么的提示?
干杯,查理 …
我在尝试将阻塞套接字服务器转换为非阻塞套接字时遇到了一个奇怪的问题。尽管使用阻塞套接字发送消息时只收到一次消息,但使用非阻塞套接字消息似乎可以无限次接收。这是更改的代码:
return ::write(client, message, size);
Run Code Online (Sandbox Code Playgroud)
到
// Nonblocking socket code
int total_sent = 0, result = -1;
while( total_sent < size ) {
// Create a temporary set of flags for use with the select function
fd_set working_set;
memcpy(&working_set, &master_set, sizeof(master_set));
// Check if data is available for the socket - wait 1 second for timeout
timeout.tv_sec = 1;
timeout.tv_usec = 0;
result = select(client + 1, NULL, &working_set, NULL, &timeout);
// We are able to write - do so …
Run Code Online (Sandbox Code Playgroud) 在完成Peter Seibel的" Practical Common Lisp"一书时,我在理解如何与Emacs的SLIME和quicklisp一起处理Common Lisp包系统时遇到了一些困难.他提供的项目具有以下结构:
spam.lisp
在包中com.gigamonkeys.spam
,依赖于另外两个包,cl-ppcre
和com.gigamonkeys.pathnames
.pathnames.lisp
在包中 com.gigamonkeys.pathnames
spam.asd
,它描述了com.gigamonkeys.spam
包的依赖关系pathnames.asd
,它描述了com.gigamonkeys.pathnames
包的依赖关系我目前发现构建最终目标spam.lisp的唯一方法是:
pathnames.asd
使用SLIME(C-x C-k
)编译并加载文件com.gigamonkeys.pathname
通过(asdf:operate 'asdf:load-op 'spam)
在REPL 键入来加载包cl-ppcre
通过(ql:quickload "cl-ppcre")
在REPL 键入来加载包spam.asd
使用SLIME 编译并加载文件com.gigamonkeys.spam
通过(asdf:operate 'asdf:load-op 'spam)
在REPL 键入来加载包这似乎是使用单个文件中定义的函数所需的大量工作(spam.lisp
) - 我必须做错事.是否有一些方法可以spam.lisp
用更少的命令加载和递归地加载它的依赖项?
javascript ×2
c++ ×1
common-lisp ×1
gdb ×1
jquery ×1
minify ×1
oop ×1
optimization ×1
quicklisp ×1
slime ×1
sockets ×1