具有原型函数与返回对象的常规函数​​的新对象

时间:2014-06-07 08:50:58

标签: javascript node.js

基本思想是检查它是否以下划线开头,如果有分裂字符串并返回下划线之后的内容。此函数将运行多次,但对于不同的字符串,我不太可能需要为每次搅拌多次检索信息。

一个简单的函数,它将返回一个包含我需要的数据的对象:

var parseElementName = function(i) {
    var sliced  = [i.slice(0, 1), i.slice(1, i.length)];
    var obj     = {
        isClass: null,
        name: ''
    }

    if(sliced[0] === '_') {
        obj.name = sliced[1];
        obj.isClass = true;
    } else {
        obj.name = i;
        obj.isClass = false;
    }

    return obj
}

使用parseElementName(i);

调用

具有原型功能的对象

var parsedElement = function(i) {
    this.className = 
    this.isClass = null;

    if(this.setElementName(i))
        return true
}

parsedElement.prototype.setElementName = function(i) {
    var sliced = [i.slice(0, 1), i.slice(1, i.length)];

    if(sliced[0] === '_') {
        this.className = sliced[1];
        this.isClass = true
    } else {
        this.className = i;
        this.isClass = false
    }
}

使用var parsed_element = new parsedElement();调用 然后是parsed_element.classNameparsedElement.isClass

建议使用哪种方法?

2 个答案:

答案 0 :(得分:0)

我最喜欢对象原型方法,但我对你的代码有一些注意事项:

  1. 在每行末尾使用分号
  2. 班级名称应大写。所以它应该是ParsedElement
  3. 我不会称它为className,因为当它不是一个类时会让人感到困惑,我会重命名它name

答案 1 :(得分:0)

这两种方式有不同的结果 - 构造函数+原型方法将产生一个具有setElementName方法的实例。您是否需要更改现有对象的字段?它是一个简单的解析器函数,所以我假设没有。在这种情况下,您应该返回对象文字:

function parseElementName(i) {
    var isClass = i.charAt(0) == '_';
    return {
        isClass: isClass,
        name = isClass ? i.slice(1) : i
    };
}

如果您以后真的需要这种方法,请考虑@ MaxMeier和@ HMR的分数。