在JavaScript中一切引用类型皆为对象,以下是我对原型和原型链的总结
目录
一、原型(prototype)
概念:函数都有 prototype
属性,称之为原型,也称为原型对象,原型对象里面可以存放属性和方法,共享给实例对象使用,用于实现继承效果。
关键词:
prototype:每个函数都有一个 prototype
属性,当这个函数被用作构造函数创建对象时,新创建的对象会继承构造函数的 prototype
属性所指向的对象的属性和方法。
__proto__:每个对象都有一个 __proto__
属性,它指向创建这个对象的构造函数的原型。通过这个属性,可以在对象之间建立原型链。
constructor:在构造函数的原型对象上有一个 constructor
属性,它指向构造函数本身。可以通过这个属性来获取构造函数。
二、原型链
1、内置对象Object
var obj = new Object()
console.log(obj.__proto__ === Object.prototype);//true
console.log(obj.__proto__.constructor=== Object);//true
console.log(Object.prototype.constructor === Object);//true
console.log(Object.prototype.__proto__);//null
2、自定义对象
function Person() { }
var p = new Person()
console.log(p.__proto__ === Person.prototype);//true
console.log(Person.prototype.constructor === Person);//true
console.log(p.constructor === Person);//true
3、Function(特殊对象)
function Person() { }
var f = new Function()
// console.log(f.__proto__===f.prototype);//false
// console.log(f.prototype.constructor===Function);//false
console.log(f.prototype.constructor === f);//true