[英]Why do we make “window.x = x = …” in javascript functions?
[英]In Javascript, why do we use functions to make objects?
在 javascript.info 上学习一些关于创建对象的基本课程。
我试图掌握选择制作对象的方式。 因为有很多方法可以做到。 另外,我们为什么要使用函数来创建对象? 为什么我们可以不用构造函数来创建对象呢? 在什么情况下,一种方式优于另一种方式?
以下是三种方式:
1:
let name = "bob";
let age = 24;
let user = {
name: name,
age: age,
}
alert(user.name);
2:
function obj(name, age) {
return {
name: name,
age: age,
};
}
let user = obj("bob", 24);
alert(user.name);
3:
function User(name, age) {
this.name = name;
this.age = age;
}
let user = new User("bob", "24")
alert(user.age);
2 和 3 中的代码实际上不是用于制作蓝图对象的相同目的吗? 谢谢。
1 和 2 创建相同的对象,它们是Object
实例。 3 创建一个对象,它是 Instance if User
以及Object
。 使用方法 3,您可以获得实现Inheritance
或至少向该类/函数(用户)的所有实例添加通用属性和方法。 例如
function User(name, age) { this.name = name; this.age = age; } User.prototype.showDetails = function () { console.log(`Name: ${this.name}\\nAge: E${this.age}`); } let user1 = new User("Bob", "24"); let user2 = new User("John", "25"); console.log(user1.showDetails()); console.log(user2.showDetails());
您的选项 2 和 3 更像是创建一个类而不是一个对象
问题是,javascript 最近才开始定义类和对象以及实例化对象之类的东西。
为了您的享受,这里是第 4 种方式
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 之间的差异可以忽略不计。
数字 1 是您使用{}
语法构建的对象。 第二个是返回您使用{}
语法创建的对象的函数。 该函数不是这里过程的一部分,它只是返回一个简单的值,一个对象。
一切都是 javascript 中的对象。 实际上不是,但主要是。 数组是对象,您创建的这些键值对是一个对象(并且对象中的每个值也可以设置为一个对象)。 字符串是对象,FUNCTIONS 是对象。 每个非原始数据类型都是一个对象。
数字 3 是一个类。 仍然是一个对象,但具有类的属性,包括具有构造函数。 一个对象只是一个值和一个数据结构,没有明确的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.