美文网首页
继承prototype对象

继承prototype对象

作者: bozhao | 来源:发表于2019-05-17 14:33 被阅读0次

js的继承并非是 由谁构造出来的便继承谁自身上的属性,需要先把这个理解了。那既然不是继承他自身上的属性,那继承哪的呢,继承prototype上的

就像是儿子虽然是父亲生的但是儿子不会继承父亲身体上的一些东西,而是继承父亲的金钱,房子。因为父亲身体上的东西,例如 胳膊、腿只属于自己。

继承图

如图:
你所看到的那条线就是 __proto__ 原型链
看见没,js上的所有(除去null,underfind)纯对象即是对象又是函数都继承了Object.prototype上的属性。

【注意】:纯对象是没有prototype这个属性的

既然我们用到的纯对象,或即是函数又是对象的函数对象 几乎都能用Object.prototype, 那他有什么呢?


Object.prototype

即是函数又是对象的函数对象都继承Function.prototype,那他有什么?


Function.prototype

所以几乎所有函数都有如下属性或方法
constructor、
hasOwnprototype、
isPrototypeOf、
propertyIsEnumerabel、建议看MDN
toLocaleString、
toString、
valueOf、
apply、
arguments、
bind、
call、
caller

将Function当作对象,来给他的prototype或者自身上扩展一些属性,自定义的对象Obj可是拿不到的哈
如下

Function.prototype.see = "bozhao"
Function.say = "lianchao"
var obj = {}
obj.see  // underfined
obj.say // underfined

但是我如何能得到呢

var fun = function (){}
fun.see // bozhao
fun.say //underfined 因为say是扩展在Function自身上的,自身上的是不会被继承的

那我自定义一个函数当对象来使用,给他的prototype 扩展某个属性,我可以使用吗?

var fun =  function(){}
fun.prototype.hhh = "hahaha"
fun.hhh // underfined
//fun会继承Function.prototype不会 继承自身 的prototype,他自身的prototype是留给他的实例对象的

以上太简单,我们看常见的,不太容易理解的,上代码

var Fn = function(){}
Fn.prototype.kan="kankan"
Object.prototype.look  = "looklook"
Function.prototype.see = "seesee"
Function.say="saysay"
var fn = new Fn()
fn.prototype.speak="speakspeak"
fn.shout = "shout"

那么fn对象会继承哪些属性了?

fn.kan // kankan 
// fn是Fn构造出来的,会去Fn的prototype去找
fn.look // looklokk 
// fn是对象,所以始终会根据__proto__寻找到Object.prototype上  
fn.see // underfined
// see是定义在Function.prototype上的,但fn是一个对象,不会去Function.prototype找的
fn.say // underfined
 
fn.speak // 报错
// 实例化对象fn会继承Fn.prototype,而不是自身fn.prototype【注意】

fn.shout // shoutshout 
// 自身当然能找到了

所以原型链如下代码:

fn.__proto__ // Fn.prototype
Fn.prototype.__proto__ // Object.prototype
//为什么fn.__proto__ === Fn.prototype 但是Fn.__ptoto__!== Function.prototype?????
//因为prototype本身是一个对象啊,fn.__proto__是Fn.prototype,Fn.prototype不是一个函数啊,是一个对象啊。
// 所以他会去找Object.prototype
Object.prototype.__proto__ // null
//so
fn.__proto__.__proto__ === Object.prototype

结论:

1 不算underfined这些,所有对象都有prototype对象
2 纯对象会继承Object.prototype
3 即是对象又是函数 不仅会继承Object.prototype而且会继承Function.prototype
4 请熟记:
-a 实例对象会继承构造函数的prototype
-b 对象会继承Object的prototype
-c 构造函数会继承Function的prototype
-d Function会继承Object的prototype

相关文章

  • 2018-01-29 原型链理解

    普通对象和函数对象概念 prototype继承 __proto__、prototype、constructor讲解

  • JS中继承的实现

    JS中继承的实现 #prototype (js原型(prototype)实现继承) 全局的Function对象没有...

  • 原型链

    原型继承 构造函数继承? 函数对象 原型prototype

  • 继承prototype对象

    js的继承并非是 由谁构造出来的便继承谁自身上的属性,需要先把这个理解了。那既然不是继承他自身上的属性,那继承哪的...

  • 对象继承和构造函数继承

    对象继承 指定哪个对象是新对象的[[prototype]] 对象字面量隐式指定Object.prototype为其...

  • 对象的继承

    继承:prototype:原型对象,共享资源,每个函数对象都有 prototype 的显式属性proto:原型属性...

  • JavaScript——面向对象(二)

    一、prototype 1、prototype属性的作用JavaScript的每个对象都继承“原型”(protot...

  • Object.prototype

    所有的对象都继承了Object.prototype的属性和方法 Object.prototype.construc...

  • 【Javascript】prototype之我见

    目前发现prototype的两个用处:实现对象继承,以及动态为对象添加属性和方法。本质上对象的prototype仍...

  • JS:day13

    继承 1.原型对象链和 Object.prototype 2.对象继承(Object.create) 3.构造函数...

网友评论

      本文标题:继承prototype对象

      本文链接:https://www.haomeiwen.com/subject/kecnaqtx.html