在Javascript中封装

Jas*_*ien 5 javascript oop encapsulation

我对Javascript很新,因为我的SO资料会证明.

我刚刚在几个教程阅读并遇到我做的事情时,使用JavaScript应用并不完全在理解方面对面向对象和封装.

该教程声明Javascript对象可以这样声明:

var myCustomObject = new Object();
Run Code Online (Sandbox Code Playgroud)

你可以给它像这样的实例变量:

myCustomObject.myVariable = "some value";
myCustomObject.myOtherVariable = "deadbeef";
Run Code Online (Sandbox Code Playgroud)

最后,它声明您可以创建一个模板函数来创建这样的新对象:

function CustomObject(myVariable, myOtherVariable)
{
    this.myVariable = myVariable;
    this.myOtherVariable = myOtherVariable;
}
Run Code Online (Sandbox Code Playgroud)

我也知道,你可以创建并赋值给尚不存在,因此被隐式声明,如例如,当看到变量myCustomObject没有一个myVariable,但现在它的作用.

所以,我的问题是:有什么可以阻止在代码中的其他点添加新变量.如果我试图了解一个对象如何工作以及我能用它做什么,我可能永远不会看到其他.js文件中可能存在的变量,因此无法完全理解该对象. ..

另外,我怎么知道刚刚创建的某个对象不会突然在代码中添加60多个变量,这些变量在创建时根本没有提到?

你是否意味着能够一眼就能理解一个对象可以包含的内容,如果可以添加更多内容"willy nilly"?

Que*_*tin 7

我不太相信我要引用蜘蛛侠,但......

拥有权利的同时也被赋予了重大的责任

JavaScript功能强大且灵活,为程序员提供了很多自由.它没有旨在阻止程序员编写错误代码的功能.编写JavaScript时,您有责任确保代码良好,而不是语言.


BGe*_*sen 1

Javascript 对象是转换器(TM),它们可以从一种形式转变为另一种形式。

实际上,这只会丰富对象,而不会造成伤害。例如,它允许人们升级现有的“类”,而不是子类化或再次装饰实例,从而无需创建更多“类”。举个例子:

var Vehicle = function(){}

var factory = {
    create: function(name, props){
        var v = new Vehicle();
        v.type = name;
        for(var prop in props) {
            v[prop] = props[prop];
        }
    }
}

var bike = factory.create('Bike', {
    wheels: 2
});

var car = factory.create('Car', {
    wheels: 4,
    doors: 5,
    gear: 'automatic'
});

var plane = factory.create('Airplane', {
    wings: 2,
    engines: 4
});
Run Code Online (Sandbox Code Playgroud)

想象一下如果没有动态对象,上面的代码会怎样,而你却无法做到这一点:

// lets paint our car
car.color = 'candy red';
// bling!
car.racingStripes = true;
car.mirrorDice = true;
car.furryChairs = true;
Run Code Online (Sandbox Code Playgroud)

您可以以更简单的方式丰富/个性化对象。