(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!)
(注2:本文首发于我的简书,更多内容请查看我的目录。)
1. 简介
在前面,我们对这三个概念已经有所涉及,但是却并未深究。事实上,如果能熟练理解掌握这三个概念和他们之间的关系,那么在学习原型链和继承的知识时,会有一种拨云见雾之感。
2. 构造函数
构造函数其实与普通函数本身并无区别,普通函数通过new调用时,我们就称其为构造函数。当然,为了区分其与普通函数,构造函数约定首字母需要大写。下面,我们就来看一下构造函数和普通函数使用时的区别(简单来讲就是一个函数通过new调用和不通过new调用的区别)。
2.1 一个空函数
// 空函数
function A() {
}
var a1 = A();
var a2 = new A();
console.log('a1:', a1); //undefined
console.log('a2:', a2); //{}
在chrome的控制台console运行结果如图所示:
直接调用返回undefined,而使用new调用返回的却是一个空对象。这里,我们暂且不去讨论__proto__和constructor的含义。
2.2 无this有return,但是return后面无返回值,或者返回基本类型值。
// 无返回值
function A() {
return;
}
//返回undefined类型值
function B() {
return undefined;
}
// 返回Number类型值
function C() {
return 1;
}
// 返回String类型值
function D() {
return '1';
}
// 返回Boolean类型值
function E() {
return true;
}
// 返回Null类型值
function F() {
return null;
}
var a1 = A();
var a2 = new A();
console.log('a1:', a1);
console.log('a2:', a2);
var b1 = B();
var b2 = new A();
console.log('b1:', b1);
console.log('b2:', b2);
var c1 = C();
var c2 = new A();
console.log('c1:', c1);
console.log('c2:', c2);
var d1 = D();
var d2 = new A();
console.log('d1:', d1);
console.log('d2:', d2);
var e1 = E();
var e2 = new A();
console.log('e1:', e1);
console.log('e2:', e2);
var f1 = F();
var f2 = new A();
console.log('f1:', f1);
console.log('f2:', f2);
<