在js中原型是每个构造函数的属性:
这个算 js 核心概念的一部分
var f1 = new Foo();
对象 f1 的构造函数就是 Foo , f1的原型 __proto__ 就指向构造函数 Foo.prototype
可以吧代码复制一份在你控制台看看
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__);
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
GetNum.prototype.__proto__===Object.prototype//true
Object.prototype.__proto__//null------->对象这个类没有对应的上一级原型链了,他就是原型链的顶端
打印出来可以看到Object.prototype是这样的:他没有这个__proto__属性
在看一下这个:这里可以用对象的toStrin方法进行数据类型的判断,
var getType=Object.prototype.toString;
console.log(Object.prototype.toString.call(Object));//[object Function] ---->对象本身也是一个最大的构造函数
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
原型链就是这样一个一个原型组成的一级一级向上查找的链条。