构造函数constructor

constructor指的就是对象的构造函数.

function Fn(){
    var a = 1;
}
var foo = new Fn();
console.log(foo.constructor);

从这个例子中,我们可以很清楚地看到foo的构造函数是Fn,即foo.constructor === Fn().
函数也是对象,也应该是有构造函数的,那么函数的构造函数又是什么呢?

console.log(Fn.constructor);
 Function()

函数也是被创建出来的,由Function创建,Function是自己所创建的,所以Function的构造函数时它自己。

每个构造函数都有一个原型对象,这个原型对象有一个指针是指向这个构造函数的,而实例的原型包含一个指向构造函数的原型对象的指针。
还是第一个例子,从图中我们可以更好的去了解
这里写图片描述
顺着这条红色的线,找到constructor,就是Fn原型的构造函数同时也是foo的构造函数。

foo.constructor === Fn();
Fn.prototype.constructor === Fn();

举一个复杂一点点的例子

// 构造函数
function Foo(y){
    // 构造函数将会以特定模式创建对象:被创建的对象都会有"y"属性
    this.y = y;
}
// "Foo.prototype"存放了新建对象的原型引用
// 所以我们可以将之用于定义继承和共享属性或方法

//继承属性x
Foo.prototype.x = 10;

//继承方法calculate
Foo.prototype.calculate = function(z){
    return this.x + this.y + z;
}

//使用foo模式创建b和c
var b = new Foo(20);
var c = new Foo(30);

//调用继承的方法
b.calculate(30);
c.calculate(40);

console.log(
    b.__proto__ === Foo.prototype, //true
    c.__proto__ === Foo.prototype,//true
    // "Foo.prototype"自动创建了一个特殊的属性"constructor"指向Foo本身


    b.constructor === Foo,//true
    c.constructor === Foo,//true
    Foo.prototype.constructor === Foo,//true

    b.calculate === b.__proto__.calculate,//true
    b.__proto__.calculate === Foo.prototype.calculate//true
);

下图可以清楚地反映出
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值