一直不太理解的东西。
构造函数
看起来和普通函数就一样。
- 命名大写字母开头
- 只能由 “new” 操作符执行
当一个函数由 “new” 操作符执行时,按照一下流程:
- 一个新的空对象被创建并分配给 this。
- 函数体执行。通常函数体会修改 this,如,添加属性。
- 返回 this 的值。
function User(name) {
this.name = name;
this.isAdmin = false;
}
执行 new User(...)
做的就是:
function User(name) {
// this = {}; 隐式创建
// 修改 this。这里是添加了两个属性
this.name = name;
this.isAdmin = false;
// return this; 隐式返回
}
比每次都使用字面量创建要短得多,而且更易于阅读。
这是构造器的主要目的,** 实现可重用的对象创建代码 **。
从技术上讲,任何函数都可以用作构造器。即:任何函数都可以通过
new
来运行,它会执行上面的三个步骤
构造函数的 return 返回值
明确写出 return 语句时:
- 若返回的是一个对象,则就返回此对象
- 若返回的是一个基本类型,则此 return 被忽略。
换句话说,带有对象的 return 返回该对象,在所有其他情况下返回 this 。
function A() {
this.age = 99;
return { age: 19 };
}
function B() {
this.arr = [1, 2, 3];
return [4, 5, 6];
}
function C() {
this.name = 'TOM';
return 'John';
}
let a = new A();
let b = new B();
let c = new C();
console.log(a);
// { age: 19 } 丢失 this
console.log(b);
// [ 4, 5, 6 ] 丢失 this
console.log(c);
// C { name: 'TOM' } 还是 this
构造器中的方法
我们不仅可以将属性添加到 this
中,还可以添加方法到 this
中。
参考
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。