构造函数

用 new 关键字来调用的函数,称为构造函数。

构造函数的特点

  • 构造函数的首字母必须大写,用来区分于普通函数;
  • 内部使用的this对象,来指向即将要生成的实例对象;
  • 使用New来生成实例对象。

构造函数的缺点
所有的实例对象都可以继承构造器函数中的(非静态)属性和方法。但是,对象实例之间无法共享属性(可以将共享的东西放在prototype)。

JS继承通过构造函数(constructor)和原型链(prototype chains)来实现。
prototype是构造函数的属性,constructor是构造函数本身,也是原型对象的属性。
constructor属性是定义在原型对象上面,意味着也可以被实例对象继承。

function Person(name,language){
    this.name = name;
    this.language = language;
}
Person.prototype.skinColor = function(){
    console.log(this.skinColor + "skinColor");
}
var England= new Person("England", "English");
console.log(England); //Person {name: "england", language: "english"}
console.log(England.constructor); //Person()
console.log(England.constructor == Person.prototype.constructor); //true

constructor属性的作用

  • 分辨原型对象是哪个构造函数
function Person(){};
var person1 = new Person();
console.log(person1.construcotr === Person); //true
  • 从实例新建另一个实例
function Person(){};
var person1 = new Person();
var person2 = new person1.construcotr();
console.log(person2 instanceof Person); //true
//instanceof运算符用于判断:这个对象是否是这个特定类或者是它的子类的一个实例

原型prototype
JS对象分为:普通对象、函数对象。通过New Function()创建的是函数对象。
普通对象没有prototype(prototype既是属性也是对象),但是有 __proto __ 属性。js创建对象的时候都有一个__proto __内置属性,用于指向创建它的函数对象的原型对象prototype。

注意:

  • Object.__proto __指向Function.prototype
    Object是函数对象,是通过new Function()创建的
  • Function.__proto __ === Function.prototype
    Function也是对象函数,通过new Function()创建

你可能感兴趣的:(构造函数)