问题传递函数返回扩展对象

时间:2017-11-09 16:09:09

标签: javascript object

记住,在杀死信使之前......我正在学习。

我试图“使用”文件B上的函数返回来扩展文件A上的Object。将来我会有几个函数扩展,具体取决于对象。

所以,就是这样。

文件A(A.html)

<script src="B.js"></script>

<script>

var _USER = _USER || {};
_USER.levelOne = { 
  "Name" : "Jon",
  "LastName" : "Doe",
  "Age" : 30
};

_USER.levelOne.something = "some";

</script>

档案B(B.js)

function userNickName(nickname) {
  var info = {
    "NickName" : nickname
    };
  return info;
};

$(document).ready(function() {
  var userNick = $("#inputx").text();
  userNickName(userNick);
});

因此,文件B的对象应该用在文件A上。

我在文件A上尝试了以下内容

var nickFunction = userNickName;
jQuery.extend(_USER.levelOne, nickFunction);

我搜索了很多时间,但我找不到解决方案或有用的帮助。我也在思考,因为我将在文件B上有几个函数,在所有函数中创建另一个函数,将对象作为参数传递。

正如我之前所说,这不是一个真实的场景。我正在做一些练习并试图理解。

任何帮助,建议和其他观点都会有所帮助。感谢

1 个答案:

答案 0 :(得分:1)

你在这里做了一些奇怪的事情:

在B.js中你打电话:

userNickName(userNick);

但你实际上没有做任何返回值。 userNickName会返回您想要的对象,因此不清楚您在此处调用此函数的原因。

在A.html中,您将函数保存到新变量,然后将其传递给Object.extend

var nickFunction = userNickName;
// nickFunction is now a function, not the result of the function
jQuery.extend(_USER.levelOne, nickFunction);

看起来您想要获取输入的值并将该值添加到昵称。因此,您需要确定应用程序的哪个部分负责从输入中获取值。我认为它应该是A.html而不是B.js因为应该可以在不同的html页面上重用。在这种情况下,A.html需要类似的东西:

// the value to pass to the subject 
var userNick = $("#inputx").val(); // note val() not text()

// call the function from B.js and pass it the value
// it will return an object which will then be added to _USER
jQuery.extend(_USER.levelOne, userNickName(userNick));

以上内容应该在A.html中的$(document).ready()内。

这里有一个代码片段:

&#13;
&#13;
// this is in B.js
function userNickName(nickname) {
  var info = {
    "NickName": nickname
  };
  return info;
};
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- <script src="B.js"></script> -->
<script>
  var _USER = _USER || {};
  _USER.levelOne = {
    "Name": "Jon",
    "LastName": "Doe",
    "Age": 30
  };

  _USER.levelOne.something = "some";

  $(document).ready(function() {
    var userNick = $("#inputx").val();
    jQuery.extend(_USER.levelOne, userNickName(userNick));
    console.log(_USER)
  })
</script>

<body>
  <input id="inputx" type="text" value="Mark"></input>
</body>
&#13;
&#13;
&#13;