Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript设计模式_Javascript_Javascript Events - Fatal编程技术网

JavaScript设计模式

JavaScript设计模式,javascript,javascript-events,Javascript,Javascript Events,我正在使用websockets开发JavaScript聊天室应用程序。然而,除了jQuery的一些小片段之外,我对JavaScript几乎没有什么经验 我的问题是,我应该使用什么样的设计模式使一个对象自包含,并且能够创建它的多个实例而不干扰同一对象的其他实例?此外,我需要知道当'this'关键字引用当前对象实例以外的内容时,如何存储公共对象属性并从事件处理程序中访问它们 代码示例将是伟大的 目前,我正在使用原型设计模式,它似乎在工作,但不是很优雅-至少可以说。。。特别是我处理事件的方式,有更好的

我正在使用websockets开发JavaScript聊天室应用程序。然而,除了jQuery的一些小片段之外,我对JavaScript几乎没有什么经验

我的问题是,我应该使用什么样的设计模式使一个对象自包含,并且能够创建它的多个实例而不干扰同一对象的其他实例?此外,我需要知道当'this'关键字引用当前对象实例以外的内容时,如何存储公共对象属性并从事件处理程序中访问它们

代码示例将是伟大的

目前,我正在使用原型设计模式,它似乎在工作,但不是很优雅-至少可以说。。。特别是我处理事件的方式,有更好的方法吗

我目前正在做类似的事情:

function Room( args ) {
    this.container = $( '#room-' + args.id );
    this.container.find( '.someBtn' ).on( 'click', this.someEventHandler() );
}

Room.prototype.someEventHandler = function() {
    var self = this;

    return function( event ) {
        console.log( self, this, event );
    }
}

谢谢

我建议您不要把它留给计算元素和使用$.proxy的空间

function Room( args ) {
    this.container = $( args.elem ); //elem can be selector, dom element, or another jQuery object
    this.container.find( '.someBtn' ).on( 'click', $.proxy( this.clicked, this) );
}

Room.prototype.clicked = function(event) {
    console.log( this, event.currentTarget );
}
单击的
方法
中,此
是房间实例abd
event.currentTarget
是处理程序附加到的元素或委托的目标。看


我对jQuery提出了一个待定的特性请求,以使上面的内容更加清晰

原型已经足够好了,它非常适合您描述的任务

如果你想要更多,你不能逃避阅读:-) 有很多设计模式,有时更多的是偏好问题,因为差异很小

以下是关于模式的最佳读物之一:


还有一个关于模块模式和requirejs的问题:

很多问题-你最好花几个小时读一本好的JS书,比如:@tjdecke这本书与设计模式毫无关系你为什么没有研究socket.io和node.JS?有很多这样做的例子和开源的例子可以回答您的问题,您可以更快地前进。这里只是众多->@Esailija中的一本,虽然它不是一本关于设计模式的书,但它肯定有相当多的代码重用模式——因此,它可能会消除他似乎感兴趣的继承方面(可见性、原型继承的替代品)的混乱in@zipstory.com对不起,如果我不清楚,我实际上是在用SmartFoxServer做底层的东西和后端。我只是简单地构建了表示层(可以说),即JS中的高级客户端应用程序,同时利用了它们可用的API。实际上,我已经考虑过使用(主干、下划线、Require).js和jQuery来创建一个单页应用程序,因为它非常适合我的项目。然而,我发现自己无法以目前的知识水平真正掌握这些概念。代理有什么优势吗?我为什么要用它?代理比返回anon函数快吗?@user1960364不是很明显吗?单击的
.clicked
函数被简化为一行程序,在当前代码中只有4行,不幸的是,仅仅因为代码行数较少并不意味着它更高效。。。我只是不想确保我不会因为懒惰和键入更少的行而增加很多开销@user1960364这个问题是关于设计模式的,突然之间,您准备在任何地方复制代码以获得纳米性能优化P不,这根本不会影响性能。这只是一个助手函数,可以执行您每次手动执行的操作。好的,谢谢。哈哈!我总是努力从一开始就学习最佳实践。这就是本主题的真正内容在一个非常不完美的世界里,我对完美永恒的需求。英雄联盟