JavaScript(十一) 原型,原型链

上节回顾:计算输入的字符串长度 (两种方法)

第一种方法:直接让count等于字符串长度,按照英文,每个字节长度占一位,如果是中文unicode>255,再加一位。

第二种方法:count从0开始,英文字母加1,中文加2。

测试的时候在控制台输入bytesLength(str),函数名进行调用

 

1. 原型

 原型对于对象来说是祖先的作用,能够提供一些属性和方法,供后代继承

补充:构造函数能和别的区分的唯一的特点就是大驼峰式,new是用来生产对象的

2. 下面的例子中person是晚辈,可以继承祖先的属性,比如名字,在控制台输入person.name时显示的名字是hehe。

原型是一个共有祖先,相当于一个爹有几个儿子,都得跟爹姓,例下面person1.name和person.name输出是一样的东西

 

当自己身上有属性,显示自己的,自己没有的属性通过继承得到,如下: 

P.S:通过对象改原型的东西基本是不可能的,想要修改原型的属性,只能从原型修改

         删除属性时delete person.abc,可以删除本来没有的属性会显示true,删除自己的属性;删除祖先的属性会显示true,但是不会被删除,再输入还有祖先的属性

另一些注意点:简化书写

 下面是属性的简写:

 4.  constructor构造器,可以指向它本身,但是可以手动更改,这个时候再次输入car.constructor,答案就是function Person(){}

 

 3. 隐式属性-->  __proto__   里面存的是对象的原型

作用是:最后输入person.name,先在person里面找,找不到的话随着proto的指引去person.prototype里面找

 

更改原型:指向obj,再次调用proto时,出来的name就是sunny

 

 例(难一点):person.prototype.name='cherry',最后输出都是cherry,这个改的是属性,换句话说,人没变,变得是房间的东西,下面的改人了

但是下面的例子相当于给person.prototype换了个空间,是一个新的person.prototype,类似最下面的//,所以最后输出还是sunny,是原来的__proto__里的person.prototype

 

 与上面答案不一样,因为有new才有//的执行,下面的例子是cherry已经把sunny给覆盖了,

上面的例子是先new了,先把sunny这个对象给生成了

2. 原型链(原型还有原型)

2.1 如何构成原型链

把原型连城链,原型链的连接点就是proto

而下面的Grand也有原型,里面包括toString,Object.prototype是所有对象的最终原型

找toString的时候给出的答案是从object里面来的,原型链的终端

 

 2.2 原型链上的增删改查

查看属性(和原型的一致)就是可近的来,近的没有远了找,一直找到终端,终端没有就undefined

删除(修改,增加)原型链上的原型属性,通过子孙是不可能删除的,通过自己删除

关于修改的特例:调用修改:fortune属性被加到了groud上,card2是新加的

 

覆盖性的修改是不行的,而上述修改也仅限于引用值,原始值只能覆盖修改

下面的题答案是b   控制台里:person.sayName()

如果调用写的是:person.prototype.sayName(),,,,答案就是a

 

 var obj={};对象自变量的创建形式也有原型

2.3 Object.create(原型)也能创建对象

 

 2.4 绝大多数对象最终都会继承自Object.prototype  错

有例外:因为Object.create(原型)出现特例,下面构造出来的这个对象就没有原型,没原型也没有toString方法

object还是对象(图3),但是点开以后就是没有proto

Object.create(原型)这里头只能放object或者null

 

 

人为的给加了一个proto ,不好使,系统不会读 ,不存在继承特性

 

undefined和null不能调用toString,没有原型不是对象也没法包装类

只有他俩加上你自己构造出来的没有原型的东西没有toString,剩下都有

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值