javascript基础(二)原型

一、prototype原型

函数有一个默认属性prototype,prototype是一堆对象的集合

在Object这个对象中有一个属性prototype,这个属性指向一个Prototype对象,里面含有一个默认的构造函数指向Object,还含有其他的属性

function fn() {

}
console.log(fn.prototype)

可以看一下prototype中的内容


一脸懵逼

看一下怎么用

function fn() {

}
console.log(fn.prototype)
fn.prototype.name = 'nihao'
fn.prototype.getAge = function () {
    return 18
}

var f = new fn()
console.log(f.name)      //nihao
console.log(f.getAge())    //18
console.log(fn.name)

好的,至此我们已经知道通过prototype可以动态地(在函数声明完之后)给函数附加属性了

二、隐式原型

每个函数都有一个prototype,每个对象都有一个__proto__

    var obj = new Object()
    console.log(obj.__proto__)


再看一下Object的prototype属性

    var obj = new Object()
    console.log(obj.__proto__)

    console.log(Object.prototype)

可以看到二者一模一样

原因是obj是由Object这个函数创建的,所以obj.__proto__ ==Object.prototype

即对象的__proto__指向创建他的函数的prototype
那么prototype这个对象的__proto__指向谁呢
Object.prototype的__proto__是个特例,他指向null

如图,f1是由Foo()这个函数new出来的对象,因此f1.__proto__ -> Foo.prototype
Foo.prototype是由Object()这个函数new出来的对象,因此Foo.prototype.__proto__ ->Object.prototype
Object.prototype.__proto__ -> null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值