美文网首页
JavaScript 函数prototype

JavaScript 函数prototype

作者: BlueSkyBlue | 来源:发表于2020-04-25 16:59 被阅读0次

每一个函数都有prototype属性。它默认指向一个Object的空属性(即称为原型对象)。

原型对象中有一个属性constructor,它指向函数对象。

给原型对象添加属性:函数的所有实例对象自动拥有原型中的属性(方法)。

空对象默认没有我们自己定义的属性。例如:

function fun() {

}

fun.prototype.test = function () {
    console.log('test')
}
prototype属性内部结构

给原型对象添加属性方法,一般是给实例对象使用。例如:

var f = new fun()
f.test()

显示原型与隐式原型

每个function都有一个prototype,即显示原型(属性)。默认指向一个空的Object对象。
每个实例对象都有一个__proto__,即隐式原型(属性)。

对象隐式原型的值对应其构造函数的显示原型的值。

function Fn(){

}

var fn = new Fn()
console.log(Fn.prototype === fn.__proto__)

prototype是函数定义的时候添加的。__proto__是对象创建的时候添加的。默认值为构造函数的显示原型的值。

在定义函数Fn的时候,函数内部会自动执行一段语句

this.prototype = {}

内存结构

内部结构

此时我们给Fn类添加新的方法

Fn.prototype.test = function () {
    console.log('interior')
}

之后使用fn实例调用

fn.test()

我们发现依然可以调用test方法。这是因为当fn发现自己的对象内部没有这个方法的时候会查看__proto__。查看其中是否有自己想要的方法。

注意:程序员可以操作显示原型。但是不要直接操作隐式原型(ES6之前)。

相关文章

网友评论

      本文标题:JavaScript 函数prototype

      本文链接:https://www.haomeiwen.com/subject/ixdkwhtx.html