抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

常见概念

  • 构造函数

  • 构造函数-扩展

  • 原型规则和示例

  • 原型链

  • instanceof

构造函数

任何一个函数都可以被new,new了之后,就成了构造方法。

如下:

1
2
3
4
5
6
7
8
9
function Foo(name, age) {
this.name = name;
this.age = age;
//retrun this; //默认有这一行。new一个构造函数,返回一个对象

}

var fn1 = new Foo('smyhvae', 26);
var fn2 = new Foo('vae',30); //new 多个实例对象

与普通函数相比,构造函数有以下明显特点:

  • 用new关键字调用。

  • 不需要用return显式返回值的,默认会返回this,也就是新的实例对象。

  • 建议函数名的首字母大写,与普通函数区分开。

参考链接:

当new之后,this会先变成一个空对象,然后通过this.name = name来赋值。

构造函数的扩展

上图中发现,数组、对象、函数也有构造函数,它们的构造函数是Array、Object、funtion。实际开发中,都推荐前面的书写方式。

原型规则

原型规则是学习原型链的基础。原型规则有五条,下面来讲解。

规则1

所有的引用类型(数组、对象、函数),都具有对象特性,都可以自由扩展属性。null除外。

举例:

规则2

所有的引用类型(数组、对象、函数),都有一个_proto_属性,属性值是一个普通的对象_proto_的含义是隐式原型。

其实,规则2是规则1的特例,只不过,js语法帮我们自动加了 规则2。

规则三

所有的函数(不包括数组、对象),都有一个prototype属性,属性值是一个普通的对象prototype的含义是显式原型。(实例没有这个属性)

规则四

所有的引用类型(数组、对象、函数),_proto_属性指向它的构造函数prototype值。

总结:以上四条,要先理解清楚,然后再来看下面的第五条。