如何在不同的javascripts文件中定义结构并创建它的实例

时间:2017-01-01 16:45:52

标签: javascript html

更新了问题:

我在同一个项目中有两个文件,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中初始化。

6 个答案:

答案 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
}

...正在尝试使用变量applemango的值创建对象并初始化其applemango属性。但是您没有applemango变量,因此尝试访问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脚本只有一个全局命名空间”

关于该声明的两点说明:

  1. 这是真的,但很快就不会是整个故事了。今年某个时候,浏览器将开始支持JavaScript 模块,它们将通过<script type="module" ...>标记加载。仍然只有一个共享的全局范围,但模块中的代码不会在该全局范围内执行,而是在其自己的模块范围内执行。因此顶级变量声明将不再创建全局变量。 (这是一件好事。)如果/当你在支持时切换到使用模块时,你将使用import而不是依赖于全局(尽管如果必要的话仍然可以创建它们) )。

  2. 作为网络工作者加载的脚本(因此,不是通过script标签)每个都有自己的全局范围。

答案 2 :(得分:0)

one.js中存在导致fruit未初始化的错误。因此,当它尝试运行时,您会在two.js中收到引用错误。您可以初始化applemango

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>