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

发布于 2022-09-04 09:43:42 字数 1849 浏览 16 评论 0

做的一个电商产品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能不能行得通,如果行,怎么写比较好?

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

谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倒数 2022-09-11 09:43:42

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

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

可以考虑事件监听

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

//在product.js里
$(window).trigger("addCart", [product])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文