小编Kev*_*Kev的帖子

在引用原始函数时覆盖JavaScript函数

我有一个函数,a()我想要覆盖,但也有原始a()的顺序执行,具体取决于上下文.例如,有时当我生成页面时,我想要覆盖如下:

function a() {
    new_code();
    original_a();
}
Run Code Online (Sandbox Code Playgroud)

有时像这样:

function a() {
    original_a();
    other_new_code();
}
Run Code Online (Sandbox Code Playgroud)

我如何original_a()在超越范围内获得这一点a()?它甚至可能吗?

请不要以这种方式建议替代方法,我知道很多.我特意问这个问题.

javascript overriding user-defined-functions

155
推荐指数
4
解决办法
19万
查看次数

为什么document.querySelectorAll返回StaticNodeList而不是真正的Array?

它让我觉得我document.querySelectorAll(...).map(...)甚至不能在Firefox 3.6中做到这一点,我仍然无法找到答案,所以我想我会在这篇博客上交叉发帖:

http://blowery.org/2008/08/29/yay-for-queryselectorall-boo-for-staticnodelist/

有没有人知道你没有获得阵列的技术原因?或者为什么StaticNodeList不从数组继承以这样的方式,你可以使用map,concat等等?

(顺便说一句,如果它只是你想要的一个功能,你可以做类似NodeList.prototype.map = Array.prototype.map;......但是,为什么这个功能(故意?)首先被阻止?)

javascript dom css-selectors

89
推荐指数
5
解决办法
4万
查看次数

JavaScript函数别名似乎不起作用

我只是在阅读这个问题并且想尝试别名方法而不是函数包装方法,但我似乎无法在它们的调试窗口和Firefox 3或3.5beta4或Google Chrome中使用它们.在测试网页中.

萤火虫:

>>> window.myAlias = document.getElementById
function()
>>> myAlias('item1')
>>> window.myAlias('item1')
>>> document.getElementById('item1')
<div id="item1">
Run Code Online (Sandbox Code Playgroud)

如果我把它放在一个网页中,对myAlias的调用会给我这个错误:

uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file:///[...snip...]/test.html :: <TOP_LEVEL> :: line 7" data: no]
Run Code Online (Sandbox Code Playgroud)

Chrome(为了清晰起见插入了>>>):

>>> window.myAlias = document.getElementById
function getElementById() { [native code] }
>>> window.myAlias('item1')
TypeError: Illegal invocation
>>> document.getElementById('item1')
<div id=?"item1">?
Run Code Online (Sandbox Code Playgroud)

在测试页面中,我得到了相同的"非法调用".

难道我做错了什么?其他人可以重现这个吗?

另外,奇怪的是,我只是尝试了它在IE8中工作.

javascript alias closures function

81
推荐指数
2
解决办法
3万
查看次数

使用JavaScript向所有打开的窗口/选项卡发送消息

我听说HTML5有window.postMessage(),但似乎需要在窗口(或选项卡,整个问题)上有一个句柄,你要发布消息.如果我要向所有打开的窗口广播怎么办?这可能吗?

(我想要做的就是警告其他的窗口,没有任何服务器往返当用户做一些事情在影响别人一个窗口,使他们能够更新他们的内容.然而,虽然一些窗口可能从现有的开放--allowing我拦截和存储引用他们 - 一些新鲜的窗口可以由用户手动打开,然后选择书签或URL输入在这种情况下,似乎没有被拦截的方式和存储引用.)

javascript html5 cross-window-scripting

22
推荐指数
3
解决办法
1万
查看次数

使用JavaScript模拟tab键

我希望浏览器的行为就像用户点击某些内容时按Tab键一样.在点击处理程序中,我尝试了以下方法:

var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

和jQuery:

this.input.focus().trigger({ type : 'keypress', which : 9 });
Run Code Online (Sandbox Code Playgroud)

......我从这里拿走.

第一种方法似乎是最好的选择,但并不是很有效.如果我将最后两个参数更改为98,98,确实在输入框中输入了'b'.但是,9,0和9,9(前者我从MDC网站上取得的)都在FF3下的firebug中给我这些错误:

Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);

Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);

Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);

Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

我听说过(没有明确定义'此类')事件是"不可信的",这可能解释了这些错误.

第二种方法导致我作为event.which传递的任何值作为event.which,但没有效果(即使我使用98而不是9,在框中没有输入'b'.)如果我尝试设置事件在我传递的对象中的.data,当事件被触发时它最终未定义.以下是我用来查看的代码:

$('#hi').keypress(function(e) {
  console.log(e); …
Run Code Online (Sandbox Code Playgroud)

html javascript keyboard jquery events

21
推荐指数
1
解决办法
4万
查看次数

询问意见:所有表格的一个序列

这是我最近一直在考虑的另一个.我们在之前的讨论中得出结论:"自然主键是坏的,人工主键是好的." 之前使用Hibernate我已经看到Hibernate默认为所有表创建一个序列.起初我对此感到困惑,你为什么要这样做.但后来我看到了它使父母和孩子联系起来的优势.由于没有表具有相同的主键值,因此意外地将父项与不是子项的表链接不会产生任何结果.

有没有人看到这种方法的任何缺点.我只看到一个:你的数据库中不能有超过999999999999999999999999999的记录.

oracle database-design

17
推荐指数
3
解决办法
8777
查看次数

如何在不重复此代码的情况下将一些代码放入多个名称空间?

假设我在两个不同的命名空间中定义了方法:

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    void print()
    {
        //do work...
    }
}
Run Code Online (Sandbox Code Playgroud)

foo::print()bar::print()功能是完全平等的.我的项目使用了这些函数的大量调用.

有没有办法删除其中一个print()定义而不更改这些函数的调用?我的意思是类似下面的东西(当然,C++语言不允许这种结构,它只是一个例子):

namespace foo, bar  //wrong code!
{
    void print()
    {
        //do work...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有办法按我的意愿重构代码,请告诉我,你喜欢以下决定吗?如果您的项目包含此类代码,您会感到高兴吗?:)

namespace foo
{
    void print()
    {
        //do work...
    }
}

namespace bar
{
    void print()
    {
        foo::print();
    }
}
Run Code Online (Sandbox Code Playgroud)

加:

谢谢你们,我对你的答案非常满意.我想让你澄清一下:using ::foo::print和之间有区别using foo::print吗?

c++ namespaces code-duplication

17
推荐指数
2
解决办法
529
查看次数

什么是在OpenShift v2推送钩期间的最后一秒重置PATH变量?

TL; DR:工作应用程序,克隆它,克隆无法从推送挂钩正确启动(但如果我在ssh中手动工作正常.) PATH已添加正确的节点版本,但在最后一步的某处,错误的节点版本被前置到PATH一次.

路径在这里是正确的:

remote:     PATH = /var/lib/openshift/.../app-root/data//node-v4.x.x-linux-x64/bin:/var/lib/openshift/.../app-root/runtime/repo/node_modules/.bin:/var/lib/openshift/...//.node_modules/.bin:/opt/rh/nodejs010/root/usr/bin:/bin:/usr/bin:/usr/sbin
Run Code Online (Sandbox Code Playgroud)

然后立即错误,在这里的某个地方:

remote: Starting NodeJS cartridge
remote: Tue Aug 22 2017 15:39:10 GMT-0400 (EDT): Starting application 'staging' ...
Run Code Online (Sandbox Code Playgroud)

那么在最后两行中或之前表示了哪些脚本和钩子? PATH不只是为自己添加线条......


我有一个运行OpenJhift v2应用程序,运行NodeJS版本,足以支持胖箭头表示法.

它似乎是根据Openshift上的Custom node.js版本设置的,因为该repo中的脚本(用于使用标记文件)存在于.openshift.

rhc create --from-app根据工作原理设置了第二个,重置了repo,然后重新部署到它上面.第二个工作很好,除了最后一步node:

remote: npm info ok 
remote: NOTE: The .openshift/action_hooks/build hook is not executable, to make it executable:
remote:       On Windows run:   git update-index --chmod=+x .openshift/action_hooks/build
remote:       On Linux/OSX run: chmod +x …
Run Code Online (Sandbox Code Playgroud)

git ssh node.js openshift openshift-cartridge

13
推荐指数
1
解决办法
181
查看次数

如何启用PostgreSQL功能分析器?

我花了一段时间才弄清楚,几周前我在外语维基上找到了答案,这非常有帮助,所以我想我会分享.

postgresql profiling function plpgsql

12
推荐指数
1
解决办法
3386
查看次数

从mercurial获取更改到FTP站点

我在一个PHP站点上与一个合作伙伴一起为客户工作.我们有一个共同的Mercurial存储库(在Bitbucket上),包括本地副本和实时站点.我们只有FTP访问实时站点(由于它只是一个FTP主机包,因此无法更改).

我希望能够将更改从存储库推送到实时站点.

到目前为止,我只是跟踪repo中已更改的文件,并使用FileZilla手动复制它们 - 这是一个容易出错且烦人的任务.我的想法是,在本地安装远程位置(即使用CurlFtpFS)并告诉mercurial自动将更改的文件复制到站点.理想情况下,我希望能够指定哪些更改,但这将是一个奖励.如果同步中的文件的本地状态是同步的就足够了.

有没有什么好方法可以使用linux命令行工具?

ftp mercurial

11
推荐指数
1
解决办法
2776
查看次数