小编Dan*_*scu的帖子

IIFE创建模式 - 但如何支持构造函数参数?

作为一个长期的经典继承OO程序员,我非常习惯使用构造函数并创建接受所需参数作为构造函数参数的对象.例如,发送与订单相关的警报的对象可能如下所示:

var orderNotifier = function(orderId, notifier, recipients)
{
    this.notifyApproved = function()
    { 
        // use the notifier object passed as ctor param to send notifications 
        // related to orderId to recipients 
    }
    this.notifySomeOtherEvent = function() { // use the ctor params again }
}

//  then use it like
var on = new orderNotifier(12345, new BasicNotifier(), someArrayOfEmails);
on.notifyApproved();
Run Code Online (Sandbox Code Playgroud)

这是一个人为的例子,但举例说明了(恕我直言)参数化构造函数的价值.特别:

  1. 在单个语句中将状态传递给对象
  2. 简化的方法签名
  3. 内部状态是隐藏的

认识到JavaScript中的构造函数创建模式不能很好地支持信息隐藏,我被立即调用函数表达式(IIFE)模式所吸引,其闭包和更强的访问控制.现在我遇到了这样一个事实:我不能使用IIFE模式传递对象构造参数,或者至少我不明白我是怎么做的.

我知道你可以将参数传递给匿名函数,如下所示:

(function(param){})(someVar);
Run Code Online (Sandbox Code Playgroud)

但这与显式创建新对象并将参数传递给构造函数不同.根据IIFE模式的本质,我不一定要将数据传递给对象.

我上面的IIFE版本就像:

var orderNotifier = (function()
{
    var privateHelperMethod = function() { return 'blahblahblah'; …
Run Code Online (Sandbox Code Playgroud)

javascript

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

整洁,干净的压缩git PR和合并提交,进入一次提交

在回购的大部分时间里,我们看到PR,然后是PR的合并提交,它只是说"Merged pull request #XXX from ...".

但是最近,我看到了一个压缩版本,其中pull请求者和提交者的头像重叠,并且历史记录中显示了一个干净的提交:

在此输入图像描述

如何才能做到这一点?

我尝试过但不起作用:


UPDATE

我的一个PR以这种方式合并时的样子:

在此输入图像描述

结果是:

在此输入图像描述

git commit github pull-request

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

如何获取Meteor包中文件的路径?

我知道如何从Meteor包中获取当前目录,但是如何获取项目中特定文件的路径?

节点__dirname,__filename并不在Meteor中工作.

javascript node.js meteor

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

Webix树节点的字体真棒图标

Webix与Font Awesome集成.但是如何使用Font Awesome图标代替树中的默认文件夹/文件图标来设置单个节点的样式?

这是我尝试过的:

http://webix.com/snippet/52251623

  • template 仅适用于树级
  • $css 保留现有的文件夹/文件图标
  • 没有icon记录树木财产,但设置一个做一些事情......它改变了文件夹图标为一个文件,当节点有孩子.

html css tree webix

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

Meteor中的三支架XSS是否安全?

我想知道三重花括号是否可以清除模板中的用户输入以保证XSS安全.<script>标签不会渲染,但其他令人毛骨悚然的XSS黑客呢?

提前致谢!

handlebars.js meteor meteor-blaze

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

以编程方式(或可选)覆盖Chrome的新标签页

我编写了一个Chrome扩展程序,它覆盖了新标签页:

manifest.json:

  "chrome_url_overrides": {
    "newtab": "new-tab.html"
  },
Run Code Online (Sandbox Code Playgroud)

有没有办法使这个覆盖可选?也就是说,我想让用户取消选中选项页面中的复选框并禁用新标签覆盖.这一定是可能的,因为当我第一次打开新标签时,会弹出一个通知,指示扩展程序更改"新建标签"设置并询问是保留更改还是恢复设置:

在此输入图像描述

我找不到任何用于控制覆盖的API." 新建选项卡重定向"项目没有显示本机"新建选项卡"的选项.

javascript tabs google-chrome google-chrome-extension

4
推荐指数
3
解决办法
3132
查看次数

AMP HTML支持什么CSS规则?

我已经阅读了https://github.com/ampproject/amphtml/blob/master/docs/create_page.md关于CSS的用法,但我不确定格式允许的CSS选择器.选择器/属性是否有任何限制?

样式声明可以放在任何地方<html>或仅放在<head>

是否可以包含任何外部样式表?

css amp-html

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

在 GraphQL 中重用输入类型作为片段

GraphQL 中一个非常常见的用例是创建一个带有突变的对象,并接收完全相同的字段、数据库返回的加号和 ID。这是一个相关的问题,询问这个。

我的问题是,如何简化这种模式以避免重复字段?我试过将输入类型重用为片段,

input ClientInput {
  short_name: String
  full_name: String
  address: String
  email: String
  location: String  
}

type Client {
  id: String
  ...ClientInput
}
Run Code Online (Sandbox Code Playgroud)

...但失败了

语法错误:预期名称,找到...

我在 Fragments 上看到的所有文档和博客文章总是将它们创建on为现有类型。这意味着仍然重复除 ID 字段之外的所有内容:

type Client {
  _id: String
  short_name: String
  full_name: String
  address: String
  email: String
  location: String
}

fragment ClientFields on Client {
  short_name: String
  full_name: String
  address: String
  email: String
  location: String
}

input ClientInput {
  ...ClientFields
}
Run Code Online (Sandbox Code Playgroud)

怎么样更好?

types graphql

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

客户端 JavaScript 中 mongo shell 中的 NumberInt() 等效项是什么?

1在 MongoDB shell 中,我可以使用类型强制插入一个整数值NumberInt(1)

如何从使用mongodb 模块的客户端 JavaScript 中执行此操作?

mongodb

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

输出一组字符串的所有值

在 JavaScript 中,出于调试目的,输出一组字符串的所有元素的最短代码是什么?字符串是在一行上还是在单独的行上都没有关系。

const set = new Set();
set.add('dog');
set.add('cat');

console.log(???);
Run Code Online (Sandbox Code Playgroud)

javascript set

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