在Javascript中,为什么我们使用函数来创建对象?

在Javascript中,为什么我们使用函数来创建对象?,javascript,function,object,methods,Javascript,Function,Object,Methods,在javascript.info上学习一些关于创建对象的基本课程 我正在努力掌握如何选择制作物体的方法。因为有很多方法可以做到这一点。还有,为什么我们要使用函数来创建对象?为什么我们可以不用构造函数来创建对象呢?在什么情况下,一种方法比另一种更可取 这里有三种方法: 1: let name=“bob”; 年龄=24岁; 让用户={ 姓名:姓名,, 年龄:年龄,, } 警报(用户名); 2: 功能obj(姓名、年龄){ 返回{ 姓名:姓名,, 年龄:年龄,, }; } 让用户=obj(“bob”

在javascript.info上学习一些关于创建对象的基本课程

我正在努力掌握如何选择制作物体的方法。因为有很多方法可以做到这一点。还有,为什么我们要使用函数来创建对象?为什么我们可以不用构造函数来创建对象呢?在什么情况下,一种方法比另一种更可取

这里有三种方法:

1:

let name=“bob”;
年龄=24岁;
让用户={
姓名:姓名,,
年龄:年龄,,
}
警报(用户名);
2:

功能obj(姓名、年龄){
返回{
姓名:姓名,,
年龄:年龄,,
};
}
让用户=obj(“bob”,24);
警报(用户名);
3:


功能用户(姓名、年龄){
this.name=名称;
这个。年龄=年龄;
}
let user=新用户(“bob”,“24”)
警报(用户年龄);

2和3中的代码实际上不是用于制作蓝图对象的相同目的吗?谢谢。

您的选项2和3更像是创建类而不是对象

问题是,javascript最近才开始定义类、对象和实例化对象之类的东西

为了您的享受,这里是第四条路

class User{
  constructor (name, age) {
    this.name = name
    this.age = age
  }
}

let user = new User("bob", "24")
这种新方法允许您扩展另一个类,从而提供适当的继承

class Person{
   constructor (gender) {
     this.gender=gender
   }
}
class User extends Person{
  constructor (name, age, gender) {
    super(gender)
    this.name = name
    this.age = age
  }
}

let user = new User("bob", "24", 'male')

选项1创建一个简单的对象。如果您只想存储一些密钥/数据对,那么这是一种明智的方法

选项2允许您生成大量相似的对象,但数据略有变化

选项3不是很有用,除非您将其与组合,以便生成的对象具有方法并使用继承


备选方案3方法被替代

1和2创建相同的对象,它们是
对象的实例。3创建一个对象,如果
User
以及
object
,该对象就是实例。使用方法3,您可以获得继承,或者至少向该类/函数(用户)的所有实例添加公共属性和方法。e、 g

功能用户(姓名、年龄){
this.name=名称;
这个。年龄=年龄;
}
User.prototype.showDetails=函数(){
log(`Name:${this.Name}\nAge:E${this.age}`);
}
让user1=新用户(“Bob”,“24”);
让user2=新用户(“John”,“25”);
log(user1.showDetails());

log(user2.showDetails())1和2之间的差异可以忽略不计

数字1是使用
{}
语法构造的对象。第二个函数返回使用
{}
语法创建的对象。函数不是过程的一部分,它只是返回一个简单的值,一个对象

一切都是javascript中的对象。事实上不是,但主要是。数组是对象,您创建的这些键值对是对象(对象中的每个值也可以设置为对象)。字符串是对象,函数是对象。每个非基本数据类型都是一个对象

第三是一门课。仍然是一个对象,但具有类的属性,包括具有构造函数。对象只是一个值和一个数据结构,没有显式键入。

“选项3不是很有用”-等等,我在调试时节省了很多时间,因为我可以看到一个特定的对象出现在一个意外的地方,它是
MySpecialClass
的一个实例,而不是一些不起眼的
对象
,ctor函数本身就已经值了一大笔钱。