Javascript 在对象文本中进行字符串添加的方法
我可以在对象文本中添加一些字符串吗 如果我使用Javascript 在对象文本中进行字符串添加的方法,javascript,string,reactjs,Javascript,String,Reactjs,我可以在对象文本中添加一些字符串吗 如果我使用height,Chrome会给我以下错误消息:“calc(100%-'+字符串(this.padding)+'px*2)” [ProjectContainer.js:15]未捕获类型错误:无法读取属性 未定义的“填充” 但是,如果我将其作为一个函数,则不会显示错误消息,但css似乎不起作用。这可能是因为内联样式系统不将其作为函数调用,而是作为变量调用 var styles = { root: { display: 'flex'
height,Chrome会给我以下错误消息:“calc(100%-'+字符串(this.padding)+'px*2)”
[ProjectContainer.js:15]未捕获类型错误:无法读取属性
未定义的“填充”
但是,如果我将其作为一个函数,则不会显示错误消息,但css似乎不起作用。这可能是因为内联样式系统不将其作为函数调用,而是作为变量调用
var styles = {
root: {
display: 'flex',
flexWrap: 'wrap',
textAlign: 'left',
padding: 10,
height: function() {return 'calc(100% - ' + String(this.padding) + 'px * 2)'},
width: 'calc(100% - 10px * 2)',
overflowY: 'scroll'
}
}
将高度设置为“calc(100%-10px*2)”的最佳方法是什么?您可以试试这个
var styles = {
root: {
display: 'flex',
flexWrap: 'wrap',
textAlign: 'left',
padding: 10,
width: 'calc(100% - 10px * 2)',
overflowY: 'scroll'
},
init: function() {
this.root.height = 'calc(100% - ' + String(this.root.padding) + 'px * 2)';
delete this.init;
return this;
},
}.init()
你可以试试这个
var styles = {
root: {
display: 'flex',
flexWrap: 'wrap',
textAlign: 'left',
padding: 10,
width: 'calc(100% - 10px * 2)',
overflowY: 'scroll'
},
init: function() {
this.root.height = 'calc(100% - ' + String(this.root.padding) + 'px * 2)';
delete this.init;
return this;
},
}.init()
如注释中所述,在定义对象文字时,不能使用
this
引用对象文字。相反,它将引用当前代码范围内的全局this
,或this
。基本上,当您仍在定义对象文字时,您不能使用该对象文字的属性,您需要在之后这样做:
var样式={
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:10,
高度:“”,//可选
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
}
styles.root.height='calc(100%-'+字符串(styles.root.padding)+'px*2';
console.log(样式)代码>如注释中所述,在定义对象文字时,不能使用this
引用对象文字。相反,它将引用当前代码范围内的全局this
,或this
。基本上,当您仍在定义对象文字时,您不能使用该对象文字的属性,您需要在之后这样做:
var样式={
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:10,
高度:“”,//可选
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
}
styles.root.height='calc(100%-'+字符串(styles.root.padding)+'px*2';
console.log(样式)代码>在声明期间,不能在对象文本中使用this
来正确引用<代码>JavaScript中的此
用于函数范围
下面的示例显示了问题的可能解决方案。
基本上,在函数范围中定义填充
,并在对象文字声明中检索它
在大多数情况下,其值由函数的运行方式决定
打电话。它不能在执行期间通过赋值进行设置,可能是
每次调用函数时都会有所不同
函数foo(){
this.padding=10;//只声明一次
变量样式={
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:这个,填充,
高度:'calc(100%-'+字符串(this.padding)+'px*2',
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
};
console.log(styles.root);
};
foo()代码>在声明期间,不能在对象文本中使用this
来正确引用<代码>JavaScript中的此
用于函数范围
下面的示例显示了问题的可能解决方案。
基本上,在函数范围中定义填充
,并在对象文字声明中检索它
在大多数情况下,其值由函数的运行方式决定
打电话。它不能在执行期间通过赋值进行设置,可能是
每次调用函数时都会有所不同
函数foo(){
this.padding=10;//只声明一次
变量样式={
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:这个,填充,
高度:'calc(100%-'+字符串(this.padding)+'px*2',
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
};
console.log(styles.root);
};
foo()代码>您可以执行以下操作:
var样式=(函数(){
变量填充='10';
返回{
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:+填充,
高度:“计算(100%-”+填充+px*2)”,
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
})();
这使用了一些有趣的Javascript技术,例如:
- 立即调用的函数表达式()
- 将字符串
'10'
强制转换为数字
这样做的优点是不仅可以在单个表达式中完成,而且更易于阅读和理解
您可以对其进行修改,使填充值可以从外部传入,而几乎不需要新的工作:
var styles=(函数(填充){
var padding=padding?padding:'10';
返回{
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:+填充,
高度:“计算(100%-”+填充+px*2)”,
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
})(填充);
您可以执行以下操作:
var样式=(函数(){
变量填充='10';
返回{
根目录:{
显示:“flex”,
flexWrap:“wrap”,
textAlign:'左',
填充:+填充,
高度:“计算(100%-”+填充+px*2)”,
宽度:“计算(100%-10px*2)”,
溢出:“滚动”
}
})();
这使用了一些有趣的Javascript技术,例如:
- 立即调用的函数表达式()
- 将字符串
'10'
强制转换为数字
这样做的优点是不仅可以在单个表达式中完成,而且更易于阅读和理解
您可以对其进行修改,使填充值可以从外部传入,而几乎不需要新的工作:
var styles=(函数(填充){
var padding=padding?padding:'10';
返回{
根目录:{