在我的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
为什么呢?编译器知道它们都是对象......它们看起来与我完全相同......
答案 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));