簡體   English   中英

在JavaScript中,當我在對象內部創建函數和變量時,如何避免每次都使用“ this”?

[英]In JavaScript when I create my functions and variables inside objects how can I avoid using “this” every time?

我正在使用包含功能和成員的簡單JavaScript對象
問題是每次我使用成員或函數之一時,都必須添加this
編寫this會增加工作量,因此如何避免在每個成員變量或成員函數之前使用它?
例如 :

var MyClass = cc.LayerColor.extend({
    sprite:null,
    stopGameLoop:false,
    labelScore:null,
    winSize:0,
    visibleOrigin:0,
    blocksList : [] ,
    circle:null,
    gameOverScreen:null,
    circleblockY:0,
    circleblockX:0, 
    blocksNum:0,
    currentState:0,
    zCount:0,
    currentZorder:0,
    iScore:0,


    ctor:function () {
        //////////////////////////////
        // 1. super init first
        this._super();
        this.init( cc.color(255,255,255, 255) ); 
        this.winSize = cc.winSize;
        this.visibleOrigin = cc.director.getVisibleOrigin(); 

        this.setGameOverScreen(this.blocksNum);                 
        this.setLevel(this.circleblockY,this,circleblockX);
        return true;
    },
    setLevel:function (a,b,c) {
    },
    setGameOverScreen:function (foo) {
    },


});

一直使用, this為什么呢?

您指的是對象屬性,因此必須告訴JavaScript引擎您要從中讀取對象。 有沒有隱含this好像有在Java或C#。 您正在使用的參考是this ,因此您必須使用this. 在代碼中。

可以使用with構造將對象的所有屬性轉儲到作用域中,但是強烈不建議這樣做-實際上,當TC-39(指導JavaScript的委員會)在2009年發布ES5時,它們是如此強烈。添加了新的“嚴格模式”來執行各種操作,其中之一就是完全禁止with嚴格模式。

使用顯式對象引用就是在JavaScript中完成的方式。

JavaScript中還有其他不使用this樣式的編程樣式,其中某些樣式可以很大程度上避免通過操縱閉包來使用對象引用,但是查看您的代碼,它們將與所使用的框架/庫不兼容。 其他人則避免了this但是仍然有一個明確的對象引用(例如foo. ),因此這實際上並沒有幫助。

當然,如果只希望它更短,則可以將其別名為變量:

var t = this;
t._super();
t.init(/*...*/);

(假設您正在使用的lib並不使用函數反編譯來明確地尋找到this ,有些人曾經使用過,但是希望這些天現代沒有做...)

...但是坦率地說,我建議您this感到滿意。

這是一個構造函數,表示您正在使用此函數創建對象。 對象是this 你需要指定你正在做所有這些事情來this 這是故意的,不是錯誤,根本沒有理由要更改它。 如果需要在另一個函數或setTimeout使用它,則可以聲明一個新變量,並通過執行以下操作使其引用this變量: var that = this;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM