我已经创建了一个实用程序函数,我在几乎所有我编写的Javascript代码中都包含它.所述函数的目的是简单地从数组中删除一个元素.它接受一个数组和一个索引作为参数,并返回删除了所需元素的数组.
这是功能:
sliceHere = function(array, i)
{
buffOne = array.slice(0, i);
buffTwo = array.slice(i + 1);
return buffOne.concat(buffTwo);
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.如果我有一个阵列a = ["a", "b", "c"],我想从中移除"a"它,我只是这样做a = sliceHere(a, 0);.
虽然这确实有用,但我想用更"优雅"的东西取而代之.我想要做的是使函数sliceHere成为我拥有的所有数组的方法.所以我可以简单地做到a.sliceHere(0)并达到同样的效果.这只是一种更好的做事方式,如果我错了就纠正我.
我做的是这样的:
sliceHere = function(i)
{
buffOne = this.slice(0, i);
buffTwo = this.slice(i + 1);
this = buffOne.concat(buffTwo);
}
Array.prototype.sliceHere = sliceHere
Run Code Online (Sandbox Code Playgroud)
这似乎根本不起作用.因为我知道"这个"可能不是真正的数组.如何从方法内部引用数组?
通常,随着我的代码库的增长,函数会收到越来越多的参数,并且维护变得有点草率,所以我通常只是默认为这样:
f = function(args){return args.v + 1;}
f({"v":2});
Run Code Online (Sandbox Code Playgroud)
看起来更干净,但可以吗?为什么不是每个人都这样做?
"结构配置"是指当前打开的缓冲区,选项卡,窗口及其位置.
通过'跨会话'意味着我希望能够键入:save,将其保存到~/.vimsconf,并且键入:load实际上加载这些缓冲区并设置之前的窗口和选项卡,例如.
是否可能内置功能?或者也许是一个插件?
我正在使用openSUSE 12.3
考虑这个基本的Scala示例代码:
object Test {
def main(args: Array[String]) {
inner()
var x: Int = 5
def inner() {
println("x: " + x)
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试编译它会产生以下错误消息:
test.scala:3: error: forward reference extends over definition of variable x
inner()
^
one error found
Run Code Online (Sandbox Code Playgroud)
问题:
这个问题并不是关于定义的顺序,而是确切地调用函数的时候.在定义函数之前调用函数是完全合法的 - 但如果在调用和函数定义之间放置一个变量,并且函数使用此变量,它就会突然变为非法.
我想解释这个语言功能!为什么会这样?它是如何工作的?是否还有其他更复杂的例子 - 即它只是某些其他功能的一部分还是某些规则的结果?
我想象编译器目前在做什么:
我基本上回答了我的第三个问题吗?这是这种行为的工作原理吗?它似乎使编译器复杂化(特别是如果我们考虑具有多级函数的情况).
如果是这种情况,它如何融入语言的正式定义,即语法?在我看来,我写的程序在语法上是正确的.
addHorizonLoadEvent(function() {...})以下代码段的含义是什么?
addHorizonLoadEvent(function() {
show_hide_datepickers();
});
Run Code Online (Sandbox Code Playgroud) 例如,我有一个实例播放器.我知道我不能输入:"player.health = 99999"到JavaScript,浏览器只是不让我,但如果有人制作了一个让你这样做的浏览器怎么办?或者默认情况下是否无法更改此类变量?
我正在建立一个网站,我希望能够使用Facebook"喜欢"它.我已经浏览了他们的SDK,看起来很简单......
我已经"制造"了这个:
<html>
<head>
</head>
<body>
<h1>Testing the Facebook like button</h1>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=177127339057410";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://yannbane.blogspot.com/" data-send="false" data-width="450" data-show-faces="true"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我在计算机上将其保存为"index.html".现在,当我尝试打开它时,它只显示"测试Facebook就像按钮"标题并继续加载,并没有真正发生.怎么会?我当然不是想"喜欢"index.html,而是我的博客(http://yannbane.blogspot.com/),所以我认为在本地打开它应该没有问题...
我知道Javascript中没有类,为方便起见,我将构造函数称为类.
我正在InputHandler用Javascript 调用一个类.它有一个名为的方法onMouseDown,它将它注册为一个事件处理程序,如下所示:
Irenic.InputHandler.prototype.attach = function()
{
var inputHandler = this; //Get the instance of InputHandler
document.addEventListener("keydown", inputHandler.onKeyDown, false); //Concentrate on this, but the question applies to all of these.
document.addEventListener("keyup", inputHandler.onKeyUp, false);
document.addEventListener("mousemove", inputHandler.onMouseMove, false);
document.addEventListener("mouseup", inputHandler.onMouseUp, false);
document.addEventListener("mousedown", inputHandler.onMouseDown, false);
}
Run Code Online (Sandbox Code Playgroud)
(Irenic是我正在构建的引擎的名称,它也是一个包含所有这些类的全局对象.)
该inputHandler.onMouseDown方法如下所示:
Irenic.InputHandler.prototype.onMouseDown = function(event){var inputHandler = this; //遗憾地,这是指文档,而不是InputHandler的实例
console.log(inputHandler); //Logs #document
if (event.button == 0)
{
inputHandler.mouse.lmb = true;
}
if (event.button == 1)
{
inputHandler.mouse.wheel = true; …Run Code Online (Sandbox Code Playgroud) 据我所知,可以在原始类型可以使用的地方使用引用(我并不暗示反向是真的),唯一的区别是它们的变异语义(当变量用作左值时).
那么他们不会像原版那样符合资格吗?如果是这样,为什么某些东西是一个参考,存储在它的类型中?
编辑:如果引用是不同的类型,为什么它们可以在很多情况下替换原始类型,而无需显式转换?是否涉及隐式演员?
例:
void bar(int& a);
int x;
int& y = x;
bar(y) // matching type
bar(x) // what happened here? was x cast to a reference?
Run Code Online (Sandbox Code Playgroud)