小编fen*_*ent的帖子

有什么方法可以在Javascript数组中为延迟变量定义getter?

我正在尝试将元素添加到延迟评估的数组中.这意味着在访问它们之前,不会计算或知道它们的值.这就像我之前提出的问题,但对象是对象.

我最终为对象做的是

Object.prototype.lazy = function(var_name, value_function) {
  this.__defineGetter__(var_name, function() {
    var saved_value = value_function();
    this.__defineGetter__(var_name, function() {
      return saved_value;
    });
    return saved_value;
  });
}

lazy('exampleField', function() {
  // the code that returns the value I want
});
Run Code Online (Sandbox Code Playgroud)

但我还没有找到一种方法来为真正的数组做这件事.数组没有这样的setter.您可以将函数推送到数组,但是您必须将其作为函数调用它来返回您真正想要的对象.我现在正在做的是创建了一个我将其视为数组的对象.

Object.prototype.lazy_push = function(value_function) {
  if(!this.length)
    this.length = 0;
  this.lazy(this.length++, value_function);
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道的是,还有一种方法可以在数组上执行此操作而不是假数组吗?

更新:以下函数仅在value_function返回基本数据类型时有效.

Array.prototype.lazy_push = function(value_function) {
  var a = this,
  i = this.length;
  this.push({
    toString: function() {
      return a[i] = value_function();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试推送一个包含属性的对象,则在直接访问该对象之前,您将无法访问这些属性.这不会发生在setter中,这就是为什么我想要一些Javascript的设置语法.现在我将使用假阵列,这对我正在做的事情已经足够了.

javascript arrays lazy-evaluation

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

如何映射Ctrl +分号以在行尾添加分号?

我正在尝试映射在插入模式下按[ctrl] + [分号]以移动到行的末尾并添加分号.在安装环绕声插件后,我发现自己做了很多事情.

我试过运行这个命令

inoremap <c-;> <esc>A;<esc>
Run Code Online (Sandbox Code Playgroud)

但是当我尝试它时,它退出插入模式,进入命令模式.尝试使用其他修饰符d也会产生相同的结果.

分号是否可以用修饰符映射?我究竟做错了什么?

vim

10
推荐指数
2
解决办法
2802
查看次数

为什么更改按钮的`background-color`也会改变其他样式?

http://codepen.io/anon/pen/KwKOaz

仅更改会background-color显着改变按钮元素的border样式,特别是样式.

背景变化

这种情况发生在Mac上的chrome,safari和firefox上.为什么会这样?我怎样才能安全地改变它的背景颜色?

css

10
推荐指数
1
解决办法
970
查看次数

当且仅当使用JavaScript时,如何在JavaScript中计算变量?

这就是我现在正在做的事情.

var foo = function() {
  var x = someComplicatedComputationThatMayTakeMoreTime();
  this.foo = function() { return x; };
  return x;
}
Run Code Online (Sandbox Code Playgroud)

它工作,但只有当foo被调用为这样的函数

foo();
Run Code Online (Sandbox Code Playgroud)

但是如果我想将它称为具有值的正常变量呢?我可以修改代码

var foo = function() {
  var x = someComplicatedComputationThatMayTakeMoreTime();
  this.foo = x;
  return x;
}
Run Code Online (Sandbox Code Playgroud)

这将允许我只将它作为一个函数调用一次,然后作为常规变量调用它.但它仍然不是我想要的.如果它意外地再次被调用为函数,它会变得复杂,并返回错误.

这在JavaScript中是否可行?

顺便说一句,这是针对Chrome/Firefox扩展,因此IE兼容性并不重要.

使用toString结束因为getter不允许我重新定义整个属性,所以函数必须与之关联.并且toString具有更清晰的语法.

javascript variables

9
推荐指数
1
解决办法
2415
查看次数

"onwheel"和"onscroll"事件之间有什么区别?

当我尝试更改默认滚动条属性时,我发现重写回调函数scroll()onscroll事件不方便,相反,我应该为"onwheel"事件重写一个回调函数.

那么onwheel和之间的区别是onscroll什么呢?我认为onwheel浏览器的默认处理程序会自动触发onscroll移动滚动条的功能,这就是为什么preventDefaultonwheel回调中会阻止滚动条移动的原因.我对吗?谁有更好,更具体的解释?

javascript browser jquery

8
推荐指数
2
解决办法
6413
查看次数

在其他语言中,PHP等价于静态变量是什么?

我想知道PHP是否在类中具有类型的变量,其功能类似于其他语言中的静态.我的意思是,同一个类的所有对象都使用相同的变量,当它更新时,每个对象都会更新.静态是接近的,因为它在所有对象中共享,但我需要能够更新它.我是否必须使用全局变量?

php final

7
推荐指数
2
解决办法
8977
查看次数

如何在加载头之后但在DOM之前运行脚本?

制作Google Chrome扩展程序并在加载磁头后需要运行脚本,因为头部有脚本,我需要它们才能运行.在加载DOM之前,因为那里有一个我需要击败的内联脚本.

我该怎么做?如何检测头部负载?

javascript google-chrome

7
推荐指数
1
解决办法
3465
查看次数

当USER选择JComboBox中的项目时,如何创建一个触发器

我正在寻找一个只有当用户(正在使用该程序的用户)选择一个项目时才会触发的监听器JComboBox.我不想使用ActionListenerItemListener因为当我通过程序选择项目时也会触发.我也不能使用MouseListener它,因为它只在我点击时才会触发JComboBox,而不是在我选择一个项目时触发.

我想知道最简单的方法是什么?目前,我的解决方案很混乱.当我通过代码更改jcombobox的选定项目时,我将标志设置为true.在我的动作监听器中,只有在标志为false时才会执行.

java events jcombobox

5
推荐指数
1
解决办法
669
查看次数

如何处理坚持使用NoScript之类的小部分用户?

我想创建一个完全基于socket和ajax的网站,以便用户进行交互.意味着关闭javascript的用户甚至无法以任何方式向网站发送更新,甚至无法注册.他们只能读取数据.

那么对此有什么一般意见呢?我是否应该花时间让网站足够灵活,以便能够处理一小部分关闭脚本的人?

这也是我希望能够在更多网站中重用的框架.

javascript noscript

5
推荐指数
1
解决办法
1226
查看次数

为什么我的vim映射不起作用?

我按照这里的指南创建了vim mapppings.将以下内容放入我的.vimrc文件中

let mapleader=','
if exists(":Tabularize")
  nmap <Leader>a= :Tabularize /=<CR>
  vmap <Leader>a= :Tabularize /=<CR>
  nmap <Leader>a: :Tabularize /:\zs<CR>
  vmap <Leader>a: :Tabularize /:\zs<CR>
endif
Run Code Online (Sandbox Code Playgroud)

页面说我输入,a=时应该告诉Tabularize对齐我的线条.但它会插入=光标所在的字符.

我安装了Tabularize,:Tabularize当我在没有映射的情况下调用它时,命令可以正常工作.

我究竟做错了什么?

mapping vim

5
推荐指数
1
解决办法
1117
查看次数