函数原型;原型链;isPrototypeof判断是不是某个对象的原型

1、构造函数:

【1】构造函数和普通函数的唯一区别,在于调用方式不同。任何函数只要通过new操作符来调用,那就是构造函数;任何函数只要不通过new操作符来调用,那就是普通函数。

【2】任何函数都有prototype属性(函数也是对象),该属性指向函数原型。

原型上有一个不可枚举的constructor属性:指向该函数;还有一个[[Prototype]]指针,指向原型链的上一级。没有标准的方式访问[[Prototype]],但Firefox、Safari、Chrome都用__proto__来表示。

constructor: ƒ Person()
__proto__: Object

【3】在理解原型时,我们把构造函数当做对象来看待

构造函数的prototype属性指向原型,原型的constructor属性指向构造函数。

new操作符构建的实例对象[[prototype]]指向原型,继承原型。

        function foo(){
            console.log(1)
        }
        console.log(foo);
        console.log(foo.prototype);

 2、原型链

 

3、isPrototypeOf 判断是不是在foo对象的原型链上。

function Foo() {}
function Bar() {}
function Baz() {}

Bar.prototype = Object.create(Foo.prototype);// Bar.prototype ——> Foo.prototype ——> Object.prototype
Baz.prototype = Object.create(Bar.prototype);// Baz.prototype ——> Bar.prototype ——> Foo.prototype ——> Object.prototype

var foo = new Foo();
var bar = new Bar();
var baz = new Baz();
//是在该对象的原型链上
console.log(Baz.prototype.isPrototypeOf(foo)); // false
console.log(Bar.prototype.isPrototypeOf(foo)); // false
console.log(Foo.prototype.isPrototypeOf(foo)); // true
console.log(Object.prototype.isPrototypeOf(foo)); // true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值