V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
EXDestroyer
V2EX  ›  JavaScript

js 中的对象问题,这个写法该怎么改?

  •  
  •   EXDestroyer · 2015-03-13 22:23:11 +08:00 · 3385 次点击
    这是一个创建于 3322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    function(x,y){
    this.repeatMap = function (repeatX, repeatY) {
    this.repeatX = repeatX;
    this.repeatY = repeatY;
    return this;

    }

    this.aMartix= function (){
    var flagMatrix = new Array();
    for ( i = 0; i < tileNumX; i++) {
    flagMatrix[i] = new Array();
    }

    for ( x = 0; x < tileNumX; x++) {
        for ( y = 0; y < tileNumY; y++) {
    
            flagMatrix[x][y] = new repeatMap(repeatX, repeatY);
            //这里报错了
            }
        }
    

    }

    }

    15 条回复    2015-03-16 00:26:31 +08:00
    7anshuai
        1
    7anshuai  
       2015-03-14 01:04:13 +08:00 via iPhone
    repeatMap是对象的方法,将 new repeatMap() 改为 this.repeatMap() 试试
    kmvan
        2
    kmvan  
       2015-03-14 01:07:20 +08:00 via Android
    var that =this;
    new that.repeatMap()
    blacktulip
        3
    blacktulip  
       2015-03-14 01:11:28 +08:00
    报的什么错?
    guoziyan
        4
    guoziyan  
       2015-03-14 10:36:49 +08:00
    this 的作用域发生改变 可以使用
    function Set(){
    this.x=1;
    };
    Set.prototype.get=function(){
    console.log(this.x)
    }
    EXDestroyer
        5
    EXDestroyer  
    OP
       2015-03-14 10:57:36 +08:00 via Android
    @blacktulip undefine is not a function
    lalalanet
        6
    lalalanet  
       2015-03-14 11:52:32 +08:00
    flagMatrix[x][y] = new repeatMap(repeatX, repeatY);

    执行的时候 ,寻找的是局部方法,this. repeatMap绑定到this上了。

    var that = this;

    function repeatMap (repeatX, repeatY) {
    that.repeatX = repeatX;
    that.repeatY = repeatY;
    return that;

    }

    this. repeatMap = repeatMap;


    不过楼主你这玩意写的真烂,完全不懂js的基本做法。
    EXDestroyer
        7
    EXDestroyer  
    OP
       2015-03-14 11:57:19 +08:00
    @lalalanet 确实是写的烂,,现在对js还停留在简单的DOM操作水平
    arachide
        8
    arachide  
       2015-03-14 12:00:27 +08:00
    lz身边没明白人

    把js搞成莫名奇妙的js了
    akong
        9
    akong  
       2015-03-14 19:24:49 +08:00 via Android
    repeatX ,repeatY未定义吧
    akong
        10
    akong  
       2015-03-14 19:50:37 +08:00 via Android
    this在不用context下指向的对象是不用的,在构造函数指向新建的对象
    EXDestroyer
        11
    EXDestroyer  
    OP
       2015-03-14 22:23:32 +08:00 via Android
    谢谢各位,已经基本弄明白了
    whimsySun
        12
    whimsySun  
       2015-03-15 00:16:55 +08:00
    第一次见这么写js... 不同改了,全部删掉,先补补js知识重写吧,指不定你后面又写出什么
    EXDestroyer
        13
    EXDestroyer  
    OP
       2015-03-15 07:10:23 +08:00 via Android
    @whimsySun 有哪些问题比较严重的求指出,感谢,说实话自己看书还是悟性还是不够
    whimsySun
        14
    whimsySun  
       2015-03-15 23:48:13 +08:00
    1. `repeatMap` 完全没有必要作为上下文的函数.
    2. 如果`repeatMap`作为构造函数,是不需要`return this`.
    3. `js`里声明数据,通常直接使用 `var a = []`; 声明对象`var obd = {}`
    4. `flagMatrix[x][y] = new repeatMap(repeatX, repeatY)`这里的`repeatX`和`repeatY`又是什么鬼
    EXDestroyer
        15
    EXDestroyer  
    OP
       2015-03-16 00:26:31 +08:00
    @whimsySun 谢谢回复,第一个我现在是明白了,2和4的话其实这是一个游戏里面的一小段代码,我没有写明白,第3点我试试优化一些,自己的习惯是不太好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1508 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:12 · PVG 01:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.