如何使用纯javascript正确构造对象?

时间:2017-01-10 19:18:24

标签: javascript oop object

我正在学习更好的JavaScript的学习过程。现在,我正在尝试创建一个对象,仅用于处理字符串。只是为了学习的乐趣。

我试图以正确的方式或首选方式进行谷歌搜索,但似乎无法找到关于如何启动对象的良好,可靠的教程。

我尝试了类似的东西:

(function(StringHelper, undefined) {
    'use strict';

    StringHelper.isString = function() {
        // Do stuff
    };

    StringHelper.toLowercase = function() {
        // Do stuff
    };

    StringHelper.toUppercase = function() {
        // Do stuff
    };
}());

}(window.StringHelper = window.StringHelper || {}));

();

我从https://codepen.io/grav-sebastian/pen/ZpvxYJ得到了这个,我不确定它的真正意义(这样做的方式),就像最后一部分window.StringHelper = window.StringHelper || do是什么?

这是构建简单JavaScript的好方法吗?是否可以为其他人和我自己提供良好的可重用性?

感谢。

2 个答案:

答案 0 :(得分:2)

你的问题很开放。没有规范的方法来实例化javaScript对象,就像在其他语言中一样,创建对象的唯一方法是创建构造函数。

基本上,您可以使用构造函数,使用new keyword,也可以返回object literal。但是,即使这些是-AFAIK-在基本级别直接创建对象的两种方法,也有几种创建对象的策略,如factory functionsclosures。许多策略依赖于创建空对象,然后装饰它们添加函数和属性。

虽然大多数标准浏览器和节点API都暴露了构造函数,但是有很多开发人员认为javaScript中的构造函数 - 并且隐含地,this关键字 - 是邪恶的(只是google'javascript new harm') 。

关于你粘贴的代码,正如@Mayank所说,所有代码都是关于在window.StringHelper尚未定义的情况下创建新对象,或者为它定义一些函数(如果它尚不存在)。然而,它是相当复杂的,并不是处理对象创建的最直接的方法。

因此,创建对象的标准构造方法是:

var Dancer = function(name){
    this.name = name;
}

Dancer.prototype.greet = function(){
    return 'Hi! I\'m ' + this.name;
}

通过关闭 - 允许隐私 - 来实现这一目标的方法是:

function createDancer(name){
    var module = {};

    module.greet = function(){
        return 'Hi! I\'m ' + name;
    };
    return module;
}

但是,javaScript中有很多处理对象创建的策略,每个人都有自己的优势和注意事项。

This video解释了一个简单而强大的模式来创建对象并重用它们,避免了javaScript中newthis关键字的常见缺陷。

有关javaScript中对象创建的其他有趣资源是stampit framework

答案 1 :(得分:0)

window.StringHelper = window.StringHelper || {}用作命名空间,这意味着如果已经声明了window.StringHelper,那么它将不会重新声明(|| {}部分),否则它会将window.StringHelper(window.StringHelper || part)声明为命名空间。

为了更好地学习,javascript this是一个很好的资源。