原型和原型链继承

原型、原型链、继承如何实现
借用构造函数和原型链继承哪写缺陷
手写
proto和构造函数prototype

### JavaScript中的原型原型链继承 #### 原型的本质 在JavaScript中,几乎所有的对象都有一个特殊的内部链接——[[Prototype]],这个属性通常被称为“原型”。当尝试访问一个不存在于当前对象自身的属性时,JavaScript引擎会沿着这条链条向上查找该属性,直到找到为止或到达顶端即`null`。每个函数都自带了一个名为`prototype`的公共属性,默认情况下它是一个具有`constructor`指针的对象[^1]。 #### 原型链示意图 对于任何给定的对象而言,如果它的构造器拥有自己的`prototype`成员,则此对象可通过其隐含的`__proto__`引用到那个特定的`prototype`对象;而后者同样可能关联着更高级别的原型...如此这般形成了一条由多个层次组成的连续路径,这就是所谓的“原型链”。 ```plaintext Object.prototype -> Function.prototype -> ... (其他内置类型) ... ``` #### 继承机制详解 由于存在这种级联式的连接方式,在较低级别的对象里未定义的方法/属性可以从较高级别处获取并使用。这便是JavaScript实现继承的主要手段之一:通过让新创建出来的实体自动获得已有模板里的特性来减少重复劳动,并促进模块化设计思路的发展壮大[^2]。 具体来说: - **单线程模式下的直接继承** 当某个自定义类型的实例试图调用某项操作但本地并未提供相应接口的时候,程序就会顺着`__proto__`所指示的方向去寻找匹配项; - **多层嵌套情况处理** 如果目标仍然未能被定位成功的话,那么继续沿路前进直至触及终点(`null`)或者遇到合适的候选项位置停止搜索过程。 - **修改原型的影响** 对已存在的原型进行更改会影响到所有已经建立起来的关系网内的节点,除非特别指定阻止传播行为的发生[^3]。 #### 示例代码展示 下面是一段简单的HTML文档片段配合JavaScript脚本部分用来说明如何设置构造函数及其对应的原型属性,进而达成预期的功能效果。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>Prototype Example</title> </head> <body> <script type="text/javascript"> // 定义构造函数 function Star(uname){ this.uname = uname; } // 设置原型上的方法 Star.prototype.sing = function(){ console.log(`${this.uname} is singing`); }; const starInstance = new Star('Taylor Swift'); starInstance.sing(); // 输出 "Taylor Swift is singing" </script> </body> </html> ``` 这段代码展示了怎样向构造函数`Star`添加一个新的实例方法`sing()`,并通过实际运行验证了即使是在外部也没有明确定义过这样的能力,但是依然能够正常工作,这是因为得益于背后强大的原型链支持体系[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值