前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS中的原型和原型链

JS中的原型和原型链

作者头像
Cloud-Cloudys
发布2020-07-06 17:54:44
1.5K0
发布2020-07-06 17:54:44
举报

原型

JavaScript规定,每一个函数都有一个prototype对象属性,指向另一个对象。prototype对象属性的所有属性和方法都会被构造函数的实例继承。这意味着我们可以把那些公用的属性和方法,直接定义在prototype对象属性上。

prototype就是调用构造函数所创建的实例对象的原型(proto)。js在创建对象的时候,都有一个叫做proto的属性,用于指向它的函数对象的原型对象prototype。

prototype可以让所有的对象实例共享它包含的属性和方法。

原型链

每一个对象都可以有一个原型,这可原型还可以有它自己的原型,以此类推,就形成了原型链。

查找一个对象的属性或方法的时候,如果这个对象中没有这个属性或者方法,那就会在这个对象的原型对象中去找,以此类推,直到原型链结束。

_proto_

_proto_是原型链查询中实际用到的,指向构造函数的原型对象,他是对象独有的对象._proto_ = 构造函数.prototype

在js中,万物皆是对象,函数也是对象。所以构造函数也会有_proto_属性。

constructor

每个函数都有一个原型对象,该原型对象有一个constructor属性,指向创建对象的函数本身。

总结

1、只有函数才有prototype属性。

2、对象._proto_ = 构造函数.prototype

3、构造函数的prototype指向原型对象,原型对象的constructor指向构造函数。

使用

prototype最主要的用法就是将属性暴露成公用的。

代码语言:javascript
复制
function Person(name) {
    this.name = name;
    this.f = function() {
        console.log("name is " + this.name)
    }
}

var wang = new Person("wang");
var li = new Person("li");
console.log(wang.name);			//wang
console.log(li.name);			//li
console.log(wang.f === li.f);	//false

虽然wang和li都有f属性,但是实例对象访问的都是自己的私有属性。

使用prototype将f方法变成公共属性:

代码语言:javascript
复制
function Person(name) {
    this.name = name;
}
Person.prototype.f = function() {
    console.log("name is " + this.name)
}

var wang = new Person("wang");
var li = new Person("li");
console.log(wang.name);			//wang
console.log(li.name);			//li
console.log(wang.f === li.f);	//true

这就是prototype最大的作用:将属性或方法暴露为共有。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.12.21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原型
  • 原型链
  • _proto_
  • constructor
  • 总结
  • 使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档