我一直在研究Web应用程序很长一段时间。与最有经验的技术架构师合作。无处不在我用对象表示法使用javascript和命名空间。
var web = {};
web.app = {};
web.app.customer = {
name: 'John',
getName: function(){
return 'The name is ' + this.name;
}
};
document.write(web.app.customer.getName());
但是,当我寻找任何面向对象的javascript时,我们通过调用它的构造函数来实现函数并创建它的对象。
function Customer(name){
this.name = name;
this.getName = function(){
return 'The name is ' + this.name;
}
}
var cust = new Customer('Bob');
document.write(cust.getName());
我不确定为什么架构师总是建议我使用前一种方法(命名空间)。我从未使用过后一种方法,而后者则是面向对象的javascript。
答案 0 :(得分:0)
两种方法之间的唯一区别是前者(文字符号)创建一个特定对象,而后者定义了一个构造函数,可用于创建对象。能够只有一个对象(这里有关于对象克隆的星号参数)和能够从同一个模板中实例化许多类似对象(" class")之间的区别。
两者都同样有效,具体取决于您的需求。两者都是面向对象的。
我们是否有面向对象的javascript和命名空间符号(前一个)?如果是这样,你可以创建一个对象并继承它们。
web.app.Customer = function (name) {
..
};
为什么第一种方法(命名空间)中没有私有字段?如果我用var声明任何字段,则抛出javascript错误。
因为"私人领域"不存在于Javascript中。您可以使用闭包/变量作用域的特征来模拟类似于"私有属性"的内容。但为此你显然需要功能。使用对象文字符号,你不会得到它。