JavaScript对象和原型链

本文深入探讨JavaScript的原型和原型链概念,解释了如何通过原型链实现对象间的方法和属性共享,以及构造函数和实例对象之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript基于原型的语言(prototype-based language)

  • 原型(prototype):在js中每个函数都有prototype属性,“这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法”。每个实例对象拥有的是_proto_
  • 原型链(prototype chain):对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有其原型,并从其中继承方法和属性,一层一层,以此类推,这样就叫原型链。(当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去_proto_里找这个属性,这个_proto_又会有自己的_proto_,于是就这样 一直找下去)
  • 原型对象:是一个内部对象,应当使用 proto 访问
function doSomething(){}
doSomething.prototype.foo = "bar";
var doSomeInstancing = new doSomething();
doSomeInstancing.prop = "some value";
console.log("doSomeInstancing.prop:      " + doSomeInstancing.prop);
console.log("doSomeInstancing.foo:       " + doSomeInstancing.foo);
console.log("doSomething.prop:           " + doSomething.prop);
console.log("doSomething.foo:            " + doSomething.foo);
console.log("doSomething.prototype.prop: " + doSomething.prototype.prop);
console.log("doSomething.prototype.foo:  " + doSomething.prototype.foo);
结果:

doSomeInstancing.prop:      some value
doSomeInstancing.foo:       bar
doSomething.prop:           undefined
doSomething.foo:            undefined
doSomething.prototype.prop: undefined
doSomething.prototype.foo:  bar
function Person(first, last, age, gender, interests) {
  // 属性与方法定义 
};
var person1 = new Person('Bob', 'Smith', 32, 'male', ['music', 'skiing']);

person1 对象的原型对象:即 Person构造函数的prototype属性所指向的对象
构造函数Person()的prototype属性指向的对象的原型对象:即Object构造函数的prototype属性所指向的对象。
(注意:必须重申,原型链中的方法和属性没有被复制到其他对象——它们被访问需要通过前面所说的“原型链”的方式)

  • constructor 属性
    每个实例对象都会从原型中继承一个constructor属性,该属性指向了用于构造此实例对象的构造函数。

emmmm每个对象除了有指向本身的额prototype属性,并且会有指向上层的
_proto_属性看图——【大家都说看得懂(挠头.gif 我的脑壳怎么肥事
来自http://www.mollypages.org/tutorials/jsobj_full.jpg
(——但是下面这张图我看得懂嘿嘿嘿!
在这里插入图片描述
那么_proto_指向取决于对象创建的实现方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这篇文章来自https://www.cnblogs.com/shuiyi/p/5305435.html 感激大佬我终于不用秃头了嘻嘻!

参考:mollypages.org/tutorials/jsobj_full.jpg
https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes
https://github.com/creeperyang/blog/issues/9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值