推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
EXDestroyer

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

  •  
  •   EXDestroyer · Mar 13, 2015 · 4242 views
    This topic created in 4105 days ago, the information mentioned may be changed or developed.

    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 replies    2015-03-16 00:26:31 +08:00
    7anshuai
        1
    7anshuai  
       Mar 14, 2015 via iPhone
    repeatMap是对象的方法,将 new repeatMap() 改为 this.repeatMap() 试试
    kmvan
        2
    kmvan  
       Mar 14, 2015 via Android
    var that =this;
    new that.repeatMap()
    blacktulip
        3
    blacktulip  
       Mar 14, 2015
    报的什么错?
    guoziyan
        4
    guoziyan  
       Mar 14, 2015
    this 的作用域发生改变 可以使用
    function Set(){
    this.x=1;
    };
    Set.prototype.get=function(){
    console.log(this.x)
    }
    EXDestroyer
        5
    EXDestroyer  
    OP
       Mar 14, 2015 via Android
    @blacktulip undefine is not a function
    lalalanet
        6
    lalalanet  
       Mar 14, 2015
    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
       Mar 14, 2015
    @lalalanet 确实是写的烂,,现在对js还停留在简单的DOM操作水平
    arachide
        8
    arachide  
       Mar 14, 2015
    lz身边没明白人

    把js搞成莫名奇妙的js了
    akong
        9
    akong  
       Mar 14, 2015 via Android
    repeatX ,repeatY未定义吧
    akong
        10
    akong  
       Mar 14, 2015 via Android
    this在不用context下指向的对象是不用的,在构造函数指向新建的对象
    EXDestroyer
        11
    EXDestroyer  
    OP
       Mar 14, 2015 via Android
    谢谢各位,已经基本弄明白了
    whimsySun
        12
    whimsySun  
       Mar 15, 2015
    第一次见这么写js... 不同改了,全部删掉,先补补js知识重写吧,指不定你后面又写出什么
    EXDestroyer
        13
    EXDestroyer  
    OP
       Mar 15, 2015 via Android
    @whimsySun 有哪些问题比较严重的求指出,感谢,说实话自己看书还是悟性还是不够
    whimsySun
        14
    whimsySun  
       Mar 15, 2015
    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
       Mar 16, 2015
    @whimsySun 谢谢回复,第一个我现在是明白了,2和4的话其实这是一个游戏里面的一小段代码,我没有写明白,第3点我试试优化一些,自己的习惯是不太好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   985 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 19:35 · PVG 03:35 · LAX 12:35 · JFK 15:35
    ♥ Do have faith in what you're doing.