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"?
我不太相信我要引用蜘蛛侠,但......
拥有权利的同时也被赋予了重大的责任
JavaScript功能强大且灵活,为程序员提供了很多自由.它没有旨在阻止程序员编写错误代码的功能.编写JavaScript时,您有责任确保代码良好,而不是语言.
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)
您可以以更简单的方式丰富/个性化对象。