小编Tim*_*ijk的帖子

JavaScript是否具有集合数据结构的实现?

我正在寻找一个在JavaScript中设置数据结构的体面实现.它应该能够支持纯JavaScript对象的元素.

到目前为止,我只找到了Closure Library的结构.但是我不喜欢它修改我的数据的事实.

javascript set data-structures

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

用于处理私有函数的jQuery插件设计模式(通用实践?)

我一直在开发jQuery插件已有一段时间了,我想我现在知道如何设计好一个.然而,有一个问题一直困扰着我,那就是如何以强大而优雅的方式处理私有功能.

我的插件通常看起来像这样:

(function($) {

  $.fn.myplugin = function(...) {
    ...
    // some shared functionality, for example:
    this.css('background-color', 'green');
    ...
  };
  $.fn.mypluginAnotherPublicMethod = function(...) {
    ...
    // some shared functionality, for example:
    this.css('background-color', 'red');
    ...
  };

}(jQuery));
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如何巧妙地干掉共享功能?一个明显的解决方案是将它放在插件命名空间中的函数中:

var fill = function($obj, color) {
  $obj.css('background-color', color);
};
Run Code Online (Sandbox Code Playgroud)

虽然这个解决方案很有效且命名很好,但我真的不喜欢它.原因很简单:我必须传递jQuery对象.即我必须这样称呼它:fill(this, 'red');,虽然我想这样称呼它:this.fill('red');

当然,我们可以达到这个结果简单地把filljQuery.fn.但这感觉非常不舒服.想象一下,在此基础上的方法和每个插件把这些"私人"功能,五成jQuery函数命名空间开发10个插件.它最终陷入了混乱.我们可以通过在前面的每一个与他们属于插件的名称,这些功能减少,但并没有真正使其更具吸引力.这些功能应该是私有的插件,所以我们不希望他们在所有的(直接至少不会)暴露于外界.

所以我的问题是:你们中是否有人有关于如何充分利用两个世界的建议.那是; 插件代码能够调用的方式类似"私人"的插件功能this.fill('red')(或者this.myplugin.fill('red')甚至this.myplugin().fill('red')等),同时防止jQuery函数命名空间的污染.当然它应该是轻量级的,因为这些私有函数可能会被频繁调用.


更新:感谢您的建议.

我特别喜欢David的定义一个包含'private'函数并包装jQuery对象的对象类型的想法.唯一的问题是它仍然不允许我链接"私人"和"公共"功能.这是想要this.fill('red')开始使用语法的重要原因.

我最终找到了一个我认为不是非常优雅的解决方案,但却吸引了"两全其美"的原因:

$.fn.chain = function(func) {
    return func.apply(this, Array.prototype.slice.call(arguments, 1));
};
Run Code Online (Sandbox Code Playgroud)

这允许构造如:

this. …
Run Code Online (Sandbox Code Playgroud)

javascript jquery plugins design-patterns

9
推荐指数
2
解决办法
7623
查看次数

如何使用CSS规范化按钮和锚点?

查看按钮和锚点的代码示例:http://jsbin.com/ecitex/2/edit

我试图让它们在所有浏览器中都相同.但差异仍然存在,每个浏览器都有不同的差异(尝试过Chrome,Safari,Firefox,IE8).

我错过了哪些CSS规范化?


更新: 建议:

  • 我添加了line-height: 50px(虽然我的用户代理(Chrome)默认line-heightbutton元素是normal,但它仍然垂直居中文本 - 如何?!)
  • 我添加cursor: pointer了标准化鼠标光标.

http://jsbin.com/ecitex/11/edit

那么,现在查看Firefox中的结果:注意按钮上的填充?然后在IE8中查看结果:哇,请注意两者是如何完全完全不同的?!


更新2:

似乎IE的问题是已知且无法解决的:http://www.quirksmode.org/css/tests/mozie_button2.html

我没有在Firefox的填充上找到任何东西.(quirksmode文章提到了Mozilla的问题,但这是一个不同的问题.)


更新3:

太棒了,我们修复了Firefox问题:http://jsbin.com/ecitex/15/edit

好的,到目前为止,每个答案都提供了解决方案的一部分,所以没有一个单一的最佳答案.我将给予以下人员最佳答案:

  • 解释了为什么我们必须在一个line-height: 50px垂直居中的文本中指定一个到垂直居中的文本a,而一个button只有一个垂直居中的文本line-height: normal.
  • 为IE问题提供解决方案.

html css anchor button

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

用于简单递归的Python装饰器?在标准库或其他地方?

我正在寻找一个可以使函数递归的Python装饰器.我发现自己写了很多这样的函数:

def xyz(data):
    if not isinstance(data, TypeThatDenotesSingularity):
        return map(xyz, data)
    return singular_xyz(data)
Run Code Online (Sandbox Code Playgroud)

我认为那里必须有一个装饰器(在标准库中?)可以减少一点点的符号:

@recursive(TypeThatDenotesSingularity)
def xyz(data):
    return singular_xyz(data)
Run Code Online (Sandbox Code Playgroud)

我一直在寻找,但我似乎无法到达任何地方.也许我错过了一些必要的术语?

谢谢你指点我正确的方向!

python recursion decorator

6
推荐指数
1
解决办法
873
查看次数

如何在特定日期和时间创建“Temporal.Instant”实例?

我\xe2\x80\x99m 与 JavaScript\xe2\x80\x99s提出的新 Temporal API作斗争。我想做的事情应该是直截了当的,但我未能找到令人信服的解决方案。我肯定错过了什么。

\n

任务如下:根据年、月、日、小时和分钟变量实例化 UTC 日期时间的对象表示

\n

我的想法如下:

\n
    \n
  • 我们正在谈论 UTC,所以我需要一个Temporal.Instant;
  • \n
  • new Temporal.Instant()需要以纳秒为单位的时间戳,因此 \xe2\x80\x99 不起作用;
  • \n
  • Temporal.Instant.from()需要一个 ISO 日期时间字符串,这需要我从 \xe2\x80\x94 的五个变量生成格式正确的文本,这是可能的,但有点黑客攻击,有点违背了使用日期时间库的目的;
  • \n
  • Temporal.PlainDateTime.from(){ year, month, day, hour, minute }具有正确的设计,因为它接受像;这样的对象
  • \n
  • 那么我们需要做的就是Instant从中创建一个PlainDateTime. 但这似乎不可能?除了再次通过 \xe2\x80\x94 \xe2\x80\x94 ns\xe2\x80\xa6 中的日期时间字符串或时间戳?
  • \n
\n

这太愚蠢了!这里的用例是非常基本的,但它\xe2\x80\x99(对我来说)根本不明显如何解决它。

\n

我期望能够简单地做类似的事情: Temporal.Instant.from({ year, month, day, hour, minute });

\n

现在我能想到的最好的办法是:Temporal.Instant.from(year + \'-\' + String(month).padStart(2, \'0\') + \'-\' + String(day).padStart(2, \'0\') …

javascript datetime utc ecmascript-temporal

6
推荐指数
1
解决办法
1139
查看次数

字体大小范围{1、2、3、4、5、6、7}和{xx-small,x-small,small,medium,large,x-large,xx-large之间是否存在实际关系? }?

在HTML / CSS中,可以通过以下方式指定字体大小(不建议使用,但所有浏览器都支持):

<font size="n">text</font>
Run Code Online (Sandbox Code Playgroud)

带有n的元素{1, 2, 3, 4, 5, 6, 7}

另一种可能性是:

<span style="font-size: s;">text</span>
Run Code Online (Sandbox Code Playgroud)

带有s的元素{xx-small, x-small, small, medium, large, x-large, xx-large}

两个范围之间是否有实际关系?我认为它们具有相同的大小,因为它们具有七个元素,但事实并非如此。

html css size fonts

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

如何在Python中引用本地模块?

假设我们有一个模块m:

var = None

def get_var():
    return var

def set_var(v):
    var = v
Run Code Online (Sandbox Code Playgroud)

这将无法按预期工作,因为set_var()不会存储v在模块范围内var.它将创建一个局部变量var.

所以我需要一种m从内部引用模块的方法set_var(),它本身就是模块的成员m.我该怎么做?

python import module packages

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

RxJS相当于带有属性的`Bacon.when()`(被采样但不是同步模式的一部分)

考虑以下Bacon.js代码示例(松散地基于此处的代码,使用bacon.modelbacon.jquery):

<input id="total" type="text" placeholder="total">
/
<input id="quantity" type="text" placeholder="quantity" value="1">
=
<span id="price"></span>
<script>

  var $total = Bacon.$.textFieldValue($("#total")).changes();

  var quantity = Bacon.$.textFieldValue($("#quantity"));

  var price = Bacon.when(
    [$total, quantity], function(x,y) { return x/y; }
  ).toProperty(0);

  price.onValue(function (p) {
    $('#price').text(p);
  });

</script>
Run Code Online (Sandbox Code Playgroud)

这里发生的是流$total和属性quantity被连接到一个属性price.双方$totalquantity得到一个文本输入字段输入自己的,但只$total提示price进行更新.(即已quantity采样但不是同步模式的一部分.)

我试图用RxJS而不是Bacon.js来实现同样的行为,但我能想到的只是超级丑陋的解决方案.我估计我必须忽视一些东西......?

我到目前为止最好的拍摄(行为不一样,但你明白了):

var totalChange = Rx.Observable.fromEvent($('#total'), 'input');

var totalValue = totalChange.map(function () {
  return parseInt($('#total').val(), 10); …
Run Code Online (Sandbox Code Playgroud)

javascript frp rxjs bacon.js

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

为什么“Temporal.Duration”实例的算术需要“relativeTo”参考日历日期?

提议的 JavaScript Temporal 日期/时间 API 不经意地提到 \xe2\x80\x9c 解释年、月或周需要参考点 \xe2\x80\x9d (来源),但我无法理解这是什么意思。

\n

更具体地说,以下情况是不可能的:

\n
let oneWeek = Temporal.Duration.from({ weeks: 1 });\nconsole.log(`one week is ${oneWeek.total(\'day\')} days`);\n
Run Code Online (Sandbox Code Playgroud)\n

它将导致以下错误:

\n
RangeError: a starting point is required for balancing calendar units\n
Run Code Online (Sandbox Code Playgroud)\n

这可以通过使用relativeTo调用参数来膨胀我的代码来解决total(),如下所示:

\n
RangeError: a starting point is required for balancing calendar units\n
Run Code Online (Sandbox Code Playgroud)\n

但有人能详细说明为什么这是必要的吗?据我所知,一周一直是并且永远是 7 天\xe2\x80\xa6?

\n

javascript datetime calendar duration ecmascript-temporal

2
推荐指数
1
解决办法
152
查看次数