javascript - 实例化函数对象时创建了多少次局部变量? ( 先进的 )

标签 javascript

在下面的消息对象中,如果我这样调用:

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

是否为每次调用 new Message() 创建了消息数组...如果是这样,我如何确保只有一个消息数组,因为这就是我所需要的?

var Message = function( element )
{
    var 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',
        email_s:      'Please enter a valid email.',
        same:         'Please make emails equal',
        taken:        'Sorry, that email is taken',
        validate:     'Please contact <a class="d" href="mailto:chris@domain.com">support</a> to reset your password',
    }
    this.display = function( type ) 
    {
        element.innerHTML = messages[ type ];
        new Effects().fade( element, 'down', 4000 );
    }
};

最佳答案

是的,每次都会执行整个函数,并且每次都会重新定义消息对象和函数。

你可能想要做的是将它包装在一个闭包中,并利用 Javascript 的原型(prototype)继承

var Message = (function () {
    var 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',
        email_s:      'Please enter a valid email.',
        same:         'Please make emails equal',
        taken:        'Sorry, that email is taken',
        validate:     'Please contact <a class="d" href="mailto:chris@host.com">support</a> to reset your password',
    };
    var Message = function (element) {
        this.element = element;
    };

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

这使 messages 对象对“类”保持私有(private)。

关于javascript - 实例化函数对象时创建了多少次局部变量? ( 先进的 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097299/

相关文章:

javascript - MongoDb、NodeJs、Express 和 Angular 2,来自两个集合的数据连接、检索和显示

php - 无论如何都不能将我的网站图像转换为双语吗?

javascript - Mongoose 查询 findOne({params}) 返回 null,即使它在 mongo shell 中成功?

javascript - 向函数添加唯一的 FORM 名称或 ID

javascript - JavaScript 中的双管道 (||) 会抛出错误而不是评估为 false

javascript - mongodb 将 xml 导入 mongodb

javascript - 如何使用 Breeze 查询常规可查询 WebApi 端点?

javascript - Google Places Javascript API 获取响应状态

javascript - AngularJS : Can Controller request external js on fly?

javascript - 如何将 json 写在单独的行上