学习笔记:JS面向对象之包装对象-原型链

本文探讨了JavaScript中基于原型的编程方式,包括如何通过修改原型来为基本类型添加方法,以及原型链的工作原理。解释了对象如何查找属性,从自身属性开始,如果找不到则沿着原型链向上查找。

js是基于原型的程序

例:使用Array.prototype.push = function(){}可以更改array的push方法
未免代码混乱不要轻易修改

包装对象:基本类型都有自己的包装对象:String Number Boolean
var str = new String('hello');此处的str是对象类型,即字符串形式的对象
var str = 'hello中,基本类型会找到对应的包装对象类型,包装对象把所有的属性和方法给了基本类型之后消失。所以基本类型虽然不是对象,也能使用方法。
给字符串添加方法:

var str = 'hello';
String.prototype.lastValue = function () {
    return this.charAt(this.length);
}
//添加在原型下,方法共享
alert(str.lastValue());

而下面这种写法,返回的则是undefined

var str = 'hello';
str.number = 10;
alert(str.number);

str.number=10给str添加属性的时候,str返回去找包装对象,赋给str之后该包装对象消失。在遇到alert(str.number)时,str回去找包装对象,但是原包装对象已消失,所以创建了一个新的包装对象加入属性number,故此处的属性number未定义


原型链:实例对象与原型之间的连接

function Test() {
    this.num = 10;
}
Test.prototype.num = 10;
var t1 = new Test();
alert(t1.num);
//返回10

此时t1有属性num,直接找到num=10

function Test() {
}
Test.prototype.num = 20;
//num挂载到构造函数的原型下面
var t1 = new Test();
alert(t1.num);
//返回10

t1下面没有num属性,于是通过隐式链__proto__找到原型Test.prototype,再往下找到属性num=20

原型链的最外层:Object.prototype

function Test() {
}
Object.prototype.num = 30;
//num挂载到构造函数的原型下面
var t1 = new Test();
alert(t1.num);
//返回30

此时t1和Test.prototype都没有属性num,找到Object.prototypenum=30
流程示意图如下
这里写图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值