为什么这些手写笔的哈希表现不一样?

时间:2015-03-20 22:32:44

标签: javascript node.js stylus

在我的Javascript中:

// styl is the stylus compiler instance
styl.define('passedHash', new stylus.nodes.Object({
  top: 0,
  right: 2,
  bottom: 5,
  left: 20
}));

在我的.styl文件中:

localHash = {
  top: 0
  right: 2
  bottom: 5
  left: 20
}
.fooBar
  nodeType typeof(localHash)
  padding unit(localHash['top'], 'px')
  nodeType typeof(passedHash)
  padding: unit(passedHash['top'], 'px')

编译后的输出变为:

.fooBar {
  nodeType: 'object';
  padding: 0px;
  nodeType: 'object';
}

如果我取消注释触笔中的最后一行,我希望填充规则与passedHash的{​​{1}}完全相同。但相反,手写笔崩溃了:

localHash

为什么呢?编译器知道它们都是对象......它们看起来与我完全相同......

1 个答案:

答案 0 :(得分:1)

好吧,根据Object节点(https://github.com/LearnBoost/stylus/blob/master/lib/nodes/object.js)的来源,你不能将JS对象传递给它的构造函数。所以你的passedHash是空的,你得到了那个错误。但是,您可以使用以下代码将真正的JS对象强制转换为Stylus对象:

styl.define('passedHash', {
  top: 0,
  right: 2,
  bottom: 5,
  left: 20
}, true); // <-- true for raw coercion

或更详细的版本:

styl.define('passedHash', stylus.utils.coerceObject({
  top: 0,
  right: 2,
  bottom: 5,
  left: 20
}, true));