小编Cla*_*ark的帖子

在类方法中打字"this"

我知道这可能是基本的痛苦,但我很难绕过它.

class Main
{
     constructor()
     {
         requestAnimationFrame(this.update);  //fine    
     }

     update(): void
     {
         requestAnimationFrame(this.update);  //error, because this is window
     }

}
Run Code Online (Sandbox Code Playgroud)

似乎我需要一个代理,所以让我们说使用Jquery

class Main
{
     constructor()
     {
         this.updateProxy = $.proxy(this.update, this);
         requestAnimationFrame(this.updateProxy);  //fine    
     }

     updateProxy: () => void
     update(): void
     {
         requestAnimationFrame(this.updateProxy);  //fine
     }

}
Run Code Online (Sandbox Code Playgroud)

但是来自Actionscript 3的背景,我不确定这里发生了什么.抱歉,我不确定Javascript的开始位置和TypeScript结束.

updateProxy: () => void
Run Code Online (Sandbox Code Playgroud)

而且,我不相信我这样做是对的.我想要的最后一件事是我的班级大部分都有aa()函数需要访问,aProxy()因为我觉得我写两次相同的东西?这是正常的吗?

jquery proxy-classes this typescript

75
推荐指数
5
解决办法
5万
查看次数

你能在TypeScript中扩展HTMLDivElement吗?

我是第一次制作基于DOM的游戏.我想扩展HTMLDivElement,但是在TypeScript中,HTMLDivElement是一个接口.

我想做这个伪类:

class QuizElement extends HTMLDivElement{

}
Run Code Online (Sandbox Code Playgroud)

对不起,如果这个问题很疯狂.我对DOM有些新意,只是想,我可以在任何其他环境中扩展任何视觉类,所以我想这里可行!

typescript

10
推荐指数
3
解决办法
6762
查看次数

getComputedStyle返回CSSStyleDeclaration,但访问时所有属性都为空

我有一个使用一个CSS类这反过来有一个简单的div colorbackground-color属性集.

var div = document.createElement("div");
div.classList.add("my-css-class");
container.appendChild(div);

//This prints out a CSSStyleDeclaration object. This is a large object to which I see `color` and `backgroundColor`
console.log(getComputedStyle(div));

//this gives me an empty string
console.log(getComputedStyle(div).color);

//this gives me an empty string
console.log(getComputedStyle(div).getPropertyValue("color"));
Run Code Online (Sandbox Code Playgroud)

为什么我无法访问CSSStyleDeclaration的属性?我知道它是我第一次登录的.我可以看到color: "rgb(82, 194, 145)"

css properties getcomputedstyle

8
推荐指数
1
解决办法
2181
查看次数

微优化,现代浏览器无论如何都是优化的?

我最近继承了一个库,有一个类存在的更新方法.这是一个例子.

onPointerMove(pointer, x, y, isPressed){
    var floor = Math.floor;
    var cx = this.currentX;
    var cy = this.currentY;
    var tm = this.toolManager; 
}
Run Code Online (Sandbox Code Playgroud)

这种代码大多只存在于性能关键的东西上.项目的其余部分大部分都不是这样编写的.

  1. 地板使用两次.当然在局部变量中缓存它只会在每次运行时强制进行一些"临时"内存分配?这比单纯查找函数更快?
  2. 在函数体中,this.currentX被多次引用,但实际上是否更快地缓存它?我原以为这不this.currentX涉及查找问题,但也许我错了.由于这是在示例中的剩余代码中发生的,因此所有这些属性都被缓存.

在现代JavaScript引擎上,这些内容是否真的重要?我会假设这样的优化,如果它们更快......在V8中无论如何都会被视为优化.例如,如果Math.round在一个函数中被调用了20次,那么引擎会对它进行缓存吗?

我还希望在"for it"之前缓存长度之类的东西也是我在解释代码时假设优化引擎的另一个例子(再次,只有它甚至会产生影响).

所有我真正想知道的是...从今天开始,我应该做这些Micro-Optimisations(适用于常绿浏览器)并优化我的代码,或者自2010年以来(当我阅读Performance JavaScript时)让事情稍微改变一下

谢谢!

javascript optimization

5
推荐指数
1
解决办法
393
查看次数

rxjs combineLatest和Anguar2对Observable Arrays的变化检测

我在应用程序中进行了一些基本的变化检测,我正在苦苦挣扎.我已经在这几天失去了意志!我想知道这里是否有人可以指出我正确的方向.

我有group2个user列表.一个是为了members,另一个是为了moderators.

此方法连接到数据库以获取每个都具有$key值的对象列表.现在我想使用这些键去获取UserData每个用户的实际情况.我尝试了所有的东西,这combineLatest是我唯一可以开始工作的东西.

所以两个都调用函数,我async在模板上使用管道.

members$ = myService.getMemberListByType("blah", "members");
moderators$ = myService.getMemberListByType("blah", "moderators");
Run Code Online (Sandbox Code Playgroud)

我的功能看起来像这样.

  private getMemberListByType(groupKey: string, memberType: string) {

    return this.af.database.list(`groups/${groupKey}/${memberType}`)
      .switchMap(userListKeyMap => {

        console.log("UserListKeyMap", memberType, userListKeyMap);

        let usersObservables: Observable<UserData>[] = [];
        userListKeyMap.forEach((object) => {
          usersObservables.push(this.af.database.object(`users/${object.$key}`)
            .map(UserData.fromJSON));
        });

        return Observable.combineLatest(usersObservables);
      });

  }
Run Code Online (Sandbox Code Playgroud)

但是,Angular未检测到此列表的更改,如下所示.假设其他地方的其他方法删除了一个member并将其添加到moderator.在这种情况下,members列表会发出一个空的用户列表[].

我的*ngIf和*ngFor不会检测到这个新的空对象的变化.结果是用户(在模板上)现在是2个列表的一部分,但是根据日志突出显示,此下的数据非常准确.

我觉得当我在一个空数组上组合时,这就是我问题的根源.没有什么能发出......所以Angular如何改变?我不知道如何解决它.在这个"空"用例中是否有另一种combineLatest的替代方案?由于我使用的是async管道,我需要一些有意义的东西.

有人能够为我的问题发光吗?

谢谢!

更新

我确信问题在于angular2没有检测到空的可观察列表.特别是当Observable Array有一个值时,稍后该值变为空.Angular2将看不到空数组.我目前无法解决这个问题.我的方法是错误的,还是需要注册一个空的可观察列表?

问题的屏幕

  1. 蓝色=组件的加载状态良好,用户是成员.
  2. 绿色=用户已从成员移至经理/主持人.
  3. 红色=这不存在,为什么它仍然显示?

rxjs angularfire2 angular

5
推荐指数
1
解决办法
1794
查看次数

打字稿定义.当一个班级需要动态吗?

我试图编写的一个定义文件是一个过滤器.最初从JS文件加载过滤器代码,然后使用该过滤器的字符串名称.

export class Filter
{
    do stuff...
}
Run Code Online (Sandbox Code Playgroud)

问题是每个过滤器都有自己的属性.

例如,"Marble"滤波器可能具有"频率"值,而"BlurX"滤波器具有"模糊"值.

所以:

//loaded MarbleFilter.js as a script previously
var filter: Filter = new Filter("Marble");
filter.frequency = 10   //error
Run Code Online (Sandbox Code Playgroud)

我该如何处理这种情况?有12种过滤器类型,所以也许我可以用接口做点什么?但是,我不明白其他人应该怎么知道这个:

var filter: IMarbleFilter = <IMarbleFilter>new Filter("Marble");

如果我确实使用上面的例子,是否容易制作一个空的IFilter?所以IMarbleFilter实现IFilter,Filter也是如此?

我很感激任何建议.我在我的项目中询问了当地人,但没有得到社区的回应,所以请你试试大师.

typescript

2
推荐指数
1
解决办法
248
查看次数

将Moment时区用于将来的事件,我应该保存什么?

我已经做了大量的研究,并且对随着时间的推移编程的想法是新的。

我有一个应用程序,您必须能够在当地时间安排会议。因此,您可能会说“ 2017年12月23日上午9点在旧金山”。事件位置是时间的角度。它也可能再次发生,这是一个不同的问题,但相关。

在创建活动时,我知道以后不应将活动存储在中UTC。我相信我需要:

  1. 当地日期时间
  2. UTC偏移
  3. Olson数据库ID Europe/London也许

但是,我计划在本地和服务器部分都使用Moment Timezone

通过使用此库。那如何改变我的看法?这是否意味着我不再需要担心夏时制?如果您告诉我“ 2017/12/12 09:00”,我可以将其准确地转换为世界上任何时区的本地时间吗?

所以我真正需要的是:

  1. 当地时间和日期(作为ISOString?)
  2. Olson时区ID。

稍后在服务器上,当我想在事件发生前1小时发出推送通知时。我应该涵盖这两个属性(和Moment时区)吗?

timezone recurring-events momentjs

2
推荐指数
1
解决办法
585
查看次数

attachShadow“模式”打开还是关闭?

我观看了Shadow DOM上的一些视频,以期获得一些视觉效果。每个人似乎只是忽略此模式。“只是不要使其关闭”“基本上它不太灵活,您不希望它关闭”。

attachShadow( { mode: 'open' } )
Run Code Online (Sandbox Code Playgroud)

有人简要解释一下这是什么吗?

是一个HTMLVideoElement封闭的影子的例子吗?我相信您无法在此处创建阴影,因为已经存在一个阴影,但是您无法访问它或与此无关?

谢谢。

javascript shadow-dom

2
推荐指数
1
解决办法
2053
查看次数

是什么导致物理引擎的接头撕裂?

我会保持简短,要知道我所说的事情发生在 2009 年的 Box2d for AS3 上,今天也发生在 JavaScript 中的完全独立的 p2 物理库中。

请转到以下 2d 布娃娃演示页面,并用力旋转布娃娃的头部。

https://schteppe.github.io/p2.js/demos/ragdoll.html

您将看到关节分离并变得有弹性的结果。

这个问题阻止了我用物理做任何有趣的事情。球链、弹射器、叉车、布娃娃、蜘蛛侠射击网、二维车辆......

限制似乎不稳定,甚至是多余的。我认为物理引擎适用于愤怒的小鸟或掉落的方块,但是当您添加约束时,该项目就会变成适合破坏的演示。

你能解释一下为什么会发生这种情况吗?我很天真吗?是否存在物理引擎来提供基本的主体和约束?作为开发人员,我应该应用数学来使约束正常工作?

game-physics physics-engine

0
推荐指数
1
解决办法
518
查看次数