gpt4 book ai didi

javascript - 如何为每个元素实现一个单例?

转载 作者:行者123 更新时间:2023-11-30 10:42:57 24 4
gpt4 key购买 nike

概览

这是我的消息对象。我只希望每个元素允许一个对象。评论中提到的元素。

正如用户所见,每个元素应该只有一条消息。例如,如果用户一直点击一个按钮,我不想重新实例化更多消息。只需要一个。

我本可以做的一件事是禁用按钮,直到消息显示完毕...但这不是我想要的方式。

Effects.fade() 函数在大约 4 秒后淡出消息。

问题?

我如何修改它以使其每个元素只允许一个自身实例?

对象

/**
* Message
*/

var Message = function( element )
{
// need only single instance per element..so a singleton pattern per element
this.element = element; // This is element where the message is sent
};

Message.prototype.messages =
{
name: 'Please enter a valid name',
email: 'Please enter a valid email',
pass: 'Please enter passoword, 6-40 characters',
url: 'Please enter a valid url',
title: 'Please enter a valid title',
tweet: 'Please enter a valid tweet',
empty: 'Please complete all fields',
same: 'Please make emails equal',
taken: 'Sorry, that email is taken',
validate: 'Please contact <a class="d" href="mailto:me@host.com">support</a> to reset your password',
};

Message.prototype.display = function( type )
{
Control.send( this.element, this.messages[ type ] );
var EffectsObject = new Effects( this.element );
EffectsObject.fade( 'down', 4000);
};

对象的使用

this.message_object = new Message( this.response_element );
this.message_object.display( 'empty' );

最佳答案

与现有答案类似,但更符合单例的传统概念:

Message = function(element) {
if (element.hasOwnProperty("messageInstance")) {
return element.messageInstance;
}

element.messageInstance = this;

// Remainder of your constructor logic here
};

这样您就不必在一个集中位置跟踪所有标记的元素,您可以调用 new Message(element)任意多次,并确保您只会取回一个实例。

编辑:setAttributeElement 上的一个方法专门用于处理 DOM 节点的属性(即 href 标签上的 <a>id 等等)。

相比之下,点表示法或等效的括号表示法 ( element['messageInstance'] ) 在任意 JavaScript 对象上设置属性。根据 ( X ) HTML,这两种方法都可行,但由于 messageInstance 在技术上不是合法属性规范,将其分配为对象属性在技术上更正确。

关于javascript - 如何为每个元素实现一个单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com