Javascript - 对象表示法脚本与面向对象脚本
Javascript - Object Notation Script vs Object Oriented Script
我从事 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.
- 我们不能有面向对象的 javascript 和命名空间符号(以前的)吗?如果是这样,您可以创建一个对象并继承它们。
- 为什么我在第一种方法(命名空间)中不能有私有字段?如果我使用 var 声明任何字段,则会抛出 javascript 错误。
这两种方法之间的唯一区别是前者(文字表示法)创建一个特定的对象,而后者定义一个构造函数,可用于创建对象。这是只能拥有一个对象(此处关于对象克隆的星号参数)与能够从同一模板实例化许多相似对象之间的区别 ("class")。
两者都同样有效,取决于你想要什么。两者都是面向对象的。
Cant we have object oriented javascript with namespace notation(former one)? If so can you create an object of that and inherit them.
web.app.Customer = function (name) {
..
};
Why can't I have private fields in first approach(namespace)? If I declare any field with var, javascript error is thrown.
因为 "private fields" 不存在于 Javascript 中。您可以使用 closures/variable 作用域的特性来模拟类似 "private properties" 的东西。但是为此你显然需要一个函数。使用对象字面量表示法,您不会明白这一点。
我从事 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.
- 我们不能有面向对象的 javascript 和命名空间符号(以前的)吗?如果是这样,您可以创建一个对象并继承它们。
- 为什么我在第一种方法(命名空间)中不能有私有字段?如果我使用 var 声明任何字段,则会抛出 javascript 错误。
这两种方法之间的唯一区别是前者(文字表示法)创建一个特定的对象,而后者定义一个构造函数,可用于创建对象。这是只能拥有一个对象(此处关于对象克隆的星号参数)与能够从同一模板实例化许多相似对象之间的区别 ("class")。
两者都同样有效,取决于你想要什么。两者都是面向对象的。
Cant we have object oriented javascript with namespace notation(former one)? If so can you create an object of that and inherit them.
web.app.Customer = function (name) {
..
};
Why can't I have private fields in first approach(namespace)? If I declare any field with var, javascript error is thrown.
因为 "private fields" 不存在于 Javascript 中。您可以使用 closures/variable 作用域的特性来模拟类似 "private properties" 的东西。但是为此你显然需要一个函数。使用对象字面量表示法,您不会明白这一点。