'让'打字稿中的关键字

时间:2015-01-15 01:16:35

标签: typescript

private mouseHover:MouseEventHandler<HTMLElement> = new MouseEventHandler<HTMLElement>();
public get onMouseHover():  MouseEventHandler<HTMLElement> { return this.mouseHover; }

对于上面的代码,我不理解&#39; get&#39;关键词。谁能教我相关知识并给我举例?谢谢!

3 个答案:

答案 0 :(得分:4)

  

有人能教我相关知识并给我举例吗?

它允许您定义getterhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

当某人访问属性时,基本上函数 onMouseOver会将称为 console.log(onMouseOver)

答案 1 :(得分:1)

本质上,它允许您控制属性 getten

时会发生什么

在示例代码中,您要了解自己拥有私有财产mouseHover。这不能在定义的类之外访问。作者希望在类之外访问mouseHover属性 - 不允许它被覆盖 - 本质上是只读的。

因此,作者在新属性mouseHover上使用'get'关键字公开了私有onMouseHover属性。使用get作者可以告诉JavaScript在读取属性时要执行的操作。如您所见,它只返回支持属性。

这会编译成以下JavaScript

Object.defineProperty(YourClass.prototype, "onMouseHover", {
    get: function () {
        return this.mouseHover;
    },
    enumerable: true,
    configurable: true
});

要更好地理解这一点,请查看Object.defineProperty的文档 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

答案 2 :(得分:-1)

class SomeObject {

    public getFoo () {
        return 'foo';
    }

    public get foo () {
        return 'foo';
    }
}

var obj = new SomeObject();

// True
obj.getFoo() === obj.foo;

// Does nothing
obj.foo = 'bar';

// Still true
obj.getFoo() === obj.foo;

// Does nothing
delete obj.foo;

// Still true
obj.getFoo() === obj.foo;

// Does nothing
SomeObject.prototype.foo = 'bar';

// Still true
obj.getFoo() === obj.foo;

// It's gone from all instances of SomeObject
delete SomeObject.prototype.foo;

// True
typeof obj.foo === 'undefined';