不同js文件访问对方定义的对象,如何访问?

做的一个电商产品detail页面,点击按钮添加购物车的功能。

1、写了个cart.js,定义购物车的对象及方法(如:计算购物车的总价)

//myAjax是自己写的方法(在$$这个对象中的方法),获取json数据的,购物车json数据和product数据json是两个独立的,要获取2遍。
//$$.myAjax(URL,fn)

$$.myAjax('http://localhost/resume work/jsonsc/cart.json',function(e){
    var json = JSON.parse(e);
    var cart = transformCart(json); //定义了购物车对象cart
    /*使用对象中的方法属性*/
  
    cart.bindBasic();  //绑定基本信息   
    cart.bindList();//绑定购物车中产品列表

});

function Cart(){} //构造购物车对象
Cart.prototype={ bindBasic:function{},bindList:function(){}}

2、又写了个product.js,定义产品detail的对象及方法(如:产品基本信息)

//获取产品数据,这里和购物车一样
$$.myAjax('http://localhost/resume work/jsonsc/product.json',function(e){
    var json = JSON.parse(e);
    var product= transformCart(json); //定义了产品对象product
    /*使用对象中的方法属性*/
  
    product.bindDOMDetail();  //绑定基本信息   
    product.bindEvents();//绑定产品的方法,如添加到购物车

});

function Product(){} //构造产品对象
Product.prototype={ bindDOMDetail:function{},bindEvents:function(){}}

------------------------
**这里问题来了,因为Product对象中,要定义个方法,是点击购物车按钮,将该产品添加到购物车中,但是购物车对象是在cart.js中定义的,product.js如何访问到cart的对象**

即prodyct.js中,有
Product.prototype={
    //每次点击添加到购物车,就向购物车里添加一个product对象
    bindEvents:function(){
       $("#btn").click(function(){
           cart.push(product);
           
           **//但是这里的cart访问不到,因为是在cart.js中定义的!!!**
           
    })
}

我尝试过以下几种方法:
1、将cart.js中的cart对象,做成全局变量,这里所有js文件都能访问到。(成功,但感觉这样不安全)
2、将cart.js中的cart对象以闭包的形式传出来,再在product中访问。(失败。可能闭包写的有问题,

疑问:因为cart.js中cart对象,是在$$.myAjax()获取后台数据,格式化后得到的,myAjax()是我自己封装的一个方法,并不是一个函数,准确的说是$$对象的方法,怎样用闭包形式传出来?)

3、在cart.js中写一个方法returnCart讲cart这个对象返回出来,尝试在product中用call的形式调用。(失败,不知道怎么写)

问题总结:

  • 我尝试的方法中2、3能不能行得通,如果行,怎么写比较好?

  • 有没有其他更好的方法获取比较好?

谢谢

阅读 4.4k
2 个回答

把可以暴露(需要函数外部调用)的方法return 出来.

var chart = (function(_self){
   function 内部函数(){};
   _self.外部有访问权限的函数 = function(){}//比如题主说的addChart 理论上这个函数肯定是外部事件去调用的.
   return _self;
})(chart);

可以考虑事件监听

//在cart.js里
$(window).on("addCart", function(event, product){
  // ...拿product进行操作
});

//在product.js里
$(window).trigger("addCart", [product])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题