更新了问题:
我在同一个项目中有两个文件,one.js和two.js
one.js
var fruit = {
name,
color,
}
two.js
//Here i receive a json string with list of fruit objects
//For each object in the list create a new fruit object in javascript
var received_list = JSON.parse(response);
fruit_1 = new fruit();
fruit_1.name = received_list.fruit[0].name;
fruit_1.color = received_list.fruit[0].color;
fruit_2 = new fruit();
fruit_2.name = received_list.fruit[1].name;
fruit_2.color = received_list.fruit[1].color;
语法可能不正确,但我希望它能解决我的问题。
这是我的index.html
<html>
<head>
<script src="one.js"></script>
<script src="two.js"></script>
</head>
<body>
//some content
</body>
</html>
PS - 我不想在one.js中初始化apple和mango,我希望它们在two.js中初始化。
答案 0 :(得分:1)
水果对象的语法无效,必须为每个字段赋值。
var fruit = {
apple: '',
mango: ''
}
编辑: 显然,这种语法是有效的(可能是es6),但必须先定义苹果和芒果。
答案 1 :(得分:1)
解决你的头衔:
如何从另一个js文件中的一个js文件访问javascript变量
通过script
标签 1 加载的JavaScript脚本只有一个全局命名空间,因此one.js
可以访问two.js
定义的全局变量(和副} -versa,如果你处理时间)。因此,如果为one.js
显示的代码属于全局范围,并且one.js
完成且没有错误,则two.js
将能够访问fruit
。
我在最新版本的chrome上运行此代码,我得到以下错误序列。
Uncaught ReferenceError: fruit is not defined
Uncaught ReferenceError: apple is not defined
在充分尊重的情况下,您应该从问题中的代码获得:
Uncaught ReferenceError: apple is not defined at one.js Uncaught TypeError: Cannot set property 'apple' of undefined at two.js
(订单和细节很重要。)
那是因为从ES2015(又名ES6)开始,Chrome支持多个版本,这种语法:
var fruit = {
apple,
mango
}
...与此相同:
var fruit = {
apple: apple,
mango: mango
}
...正在尝试使用变量apple
和mango
的值创建对象并初始化其apple
和mango
属性。但是您没有apple
和mango
变量,因此尝试访问apple
时出错,并且根本没有创建对象。
PS - 我不想在one.js中初始化apple和mango,我希望它们在two.js中初始化。
然后根本不要将它们包含在one.js
中。 JavaScript对象不必预先声明其属性,您可以随时添加新属性(除非您有意使用其中一个ES5 +功能来限制它)。
所以:
one.js
:
var fruit = {};
two.js
:
fruit.apple = "red";
其余的都没问题(尽管除非你有充分的理由在script
中添加head
标签,但在结束前将它们放在body
的最后</body>
代码)。
1 “通过script
标记加载的JavaScript脚本只有一个全局命名空间”
关于该声明的两点说明:
这是真的,但很快就不会是整个故事了。今年某个时候,浏览器将开始支持JavaScript 模块,它们将通过<script type="module" ...>
标记加载。仍然只有一个共享的全局范围,但模块中的代码不会在该全局范围内执行,而是在其自己的模块范围内执行。因此顶级变量声明将不再创建全局变量。 (这是一件好事。)如果/当你在支持时切换到使用模块时,你将使用import
而不是依赖于全局(尽管如果必要的话仍然可以创建它们) )。
作为网络工作者加载的脚本(因此,不是通过script
标签)每个都有自己的全局范围。
答案 2 :(得分:0)
one.js中存在导致fruit
未初始化的错误。因此,当它尝试运行时,您会在two.js中收到引用错误。您可以初始化apple
和mango
:
var apple = {};
var mango = {};
var fruit = {
apple,
mango
};
或使用不同的对象语法:
var fruit = {
apple: {},
mango: {}
};
// var fruit = {} also works
答案 3 :(得分:-1)
语法错误:
var fruit = {
apple,
mango
}
尝试使用此代码:
fruit.apple = "red";
console.log(fruit.apple);
<html>
<head>
<script>
var fruit = {
"apple":'apple',
"mango":'mango'
}
</script>
</head>
<body>
//some content
</body>
</html>
答案 4 :(得分:-1)
只是不要声明对象键。
one.js
var fruit = {};
two.js
<强> fruit.apple = '红色'; 强>
<强> fruit.mango ='黄色; 强>
OR
one.js
var fruit = {apple:''};
答案 5 :(得分:-2)
首先你应该验证你的one.js对象... 然后通过jQuery库,您可以轻松完成此操作。 首先,你应该以这种方式将one.js包含在two.js中:
$.getScript("one.js", function(){
fruit.apple = "red";
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>