构造函数

用 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()创建
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容