js中的原型以及原型链

时间:2023-03-09 17:01:47
js中的原型以及原型链

在js中原型是每个构造函数的属性:

这个算 js 核心概念的一部分

var f1 = new Foo();

对象 f1 的构造函数就是 Foo , f1的原型 __proto__ 就指向构造函数 Foo.prototype

js中的原型以及原型链

可以吧代码复制一份在你控制台看看

function GetNum() {
        alert('1');
    }
    var a=new GetNum;
    console.log(GetNum);
    console.log(a);
    console.log(a.__proto__);
    console.log(GetNum.prototype) ;
    console.log(GetNum.__proto__);
    console.log(GetNum.prototype.__proto__) ;
    console.log(Object.prototype);
    console.log(Object.prototype.__proto__);
打印出来会看到:
a.__proto__===GetNum.prototype//true
js中的原型以及原型链
GetNum.prototype.__proto__===Object.prototype//true
Object.prototype.__proto__//null------->对象这个类没有对应的上一级原型链了,他就是原型链的顶端
打印出来可以看到Object.prototype是这样的:他没有这个__proto__属性
js中的原型以及原型链
在看一下这个:这里可以用对象的toStrin方法进行数据类型的判断,
var getType=Object.prototype.toString;
console.log(Object.prototype.toString.call(Object));//[object Function]   ---->对象本身也是一个最大的构造函数
所以说原型就是每个构造函数的__proto__属性,它指向对应的类的prototype,
例如可以new date=new Date;
那么date的__proto__指向Date这个类的prototype,但是最后还是会指向Object.prototype
var  date=new Date;
console.log(date.__proto__);
console.log(Date.prototype);
date.__proto__===Date.prototype//true
js中的原型以及原型链
原型链就是这样一个一个原型组成的一级一级向上查找的链条。