JavaScript on local scopeing(非常菜鸟)
JavaScript on local scoping (very noob)
我正在尝试学习JavaScript,但我被困在范围界定上。
var payments = function () {
var invoice = {};
return {
init: function (Obj) {
invoice = Obj;
},
invoice : invoice
};
}();
我打电话给payments.init({foo:bar})
.然后,如果我调用payments.invoice
它会返回undefined
.但是init
函数应该在调用时搜索外部变量invoice
。我做错了什么?
我来自PHP,JavaScript中的OOP让我发疯。
问题是 invoice
属性是按值分配的,而不是按引用分配的(JS 没有通过引用赋值)。
然后,当您更改变量的值时 invoice
,属性invoice
的值不会神奇地更新。
您可以尝试使用读取变量invoice
的方法,而不是将invoice
的值存储在数据属性中:
var payments = function () {
var invoice = {};
return {
init: function (obj) { invoice = obj; },
invoice: function() { return invoice; }
}
}();
payments.init({foo: "bar"});
payments.invoice(); // {foo: "bar"}
或使用 getter 属性:
var payments = function () {
var invoice = {};
return {
init: function (obj) { invoice = obj; },
get invoice() { return invoice; }
}
}();
payments.init({foo: "bar"});
payments.invoice; // {foo: "bar"}
这是因为返回对象的 invoice
属性仍然指向初始对象。您更改了invoice
变量指向的对象,但未更改模块对象。
尝试这样的事情:
var payments = function () {
var module = {
init: function (Obj) {
module.invoice = Obj;
},
invoice: null
};
return module;
}();
是这样的:
var invoice={a:1}
var payments={
init:function(obj){
invoice=obj;
console.log(invoice);
},
invoice:invoice
};
payments.init({foo:'bar'});//{foo:'bar'}
console.log(payments.invoice)//{a:1}
相关文章:
- 通过javascript操作图像,非常简单
- 下拉式父菜单链接在移动设备中不起作用
- 显示菜单项
- 如何定义和渲染子菜单项,使用Aurelia's路由器
- 如何将导航菜单链接到jQuery选项卡
- 在蓝鸟中处理异常
- 高亮显示单击菜单链接
- 非常简单的XMLHttpRequest不起作用
- 而循环使用蓝鸟承诺
- 蓝鸟承诺并抓住树枝
- AngularJS 路由菜鸟
- JavaScript on local scopeing(非常菜鸟)
- javascript 的菜鸟试图用按钮将 +1 添加到变量中
- JavaScript菜鸟.变量和元素
- 快递.js HTTPS服务器菜鸟
- 关于淘汰赛.js和范围的菜鸟问题
- JavaScript OO 编程语法帮助菜鸟
- Javascript传递一个字符串来创建一个对象名(菜鸟)
- 菜鸟在与柴,莫卡,快递,约翰五和节点写测试时出错
- Javascript 揭示模块模式 菜鸟