09-js原型

原型

1.引用知识点

1.1全局函数:typeof

1.2引用数据

1.3函数有那些属性

2.原型思想:对象共用内存空间

2.1函数和对象

1)(原型)对象:__proto__属性,所有对象都有的属性,代表着该对象的原型对象

2)所有的函数都有name,length,prototype属性。

  •  函数:prototype属性,保存了一个对象,这个对象是 new Object()
  •  用函数创建对象(new构造的对象),创建出来的原型对象就是prototype属性的引用对象
  •    new fn(): 得到一个下面1步骤的对象==>{__proto__:fn.prototype(是一个对象)}

构造函数的步骤:

   1。 创建一个空对象, 

   2。  运行fn函数 函数内部的this就是创建的这个对象

   3。  new fn()表达式会生成一个结果(可能是第1步骤的对象,也有可能是其他引用数据),让后结果赋给某个变量

 ​​​​

3)同一个函数构建的对象的__proto__指向同一个函数隐式创建的prototype属性,所以共用同一个空间

每new一次就产生一个新对象。所以f1不等于f2

4)不同函数构建的对象

3.原型链

3.1原型链的基本层级

例子理解:

3.2增加 Function链

1)函数的三种创建方法:都隐式或显示的使用new Function()创建。

  • 定义式:var fn = function(){}
  • 声明式:function fn(){}
  • 官方式:var fn = new Function()

2)同理,数组、对象、字符串的创建也使用 new 内置方法()创建的。

  • var arr = [] ==>var arr = new Array()   
  • Array.prototype=new Object()
  • Function.prototype = new Object()

3)创建函数,则所有的函数的__proto__为Function的prototype

4)  

函数的__proto__和他的属性prototype不是相等的:

函数.__proto__ 代表函数对象的原型对象==》Function.prototype

函数.prototype 代表的是用它创建出来的对象的原型对象

5)

例子理解1:

3.3对象的成员操作和原型对象的操作

1)对象的成员操作

2)原型对象的操作

function fn(name){

this.name = name;

}

fn.prototype = {age :30}

var obj = new fun('karen')

  • 原型对象的取值
    1. var re = obj.age //自己没有就在原型对象里找,也没有就取原型的原型直到null,还没有取undefined

  • 原型对象的存值
    1. fn.prototype = {age:30};   //prototype重新指向新的地方。对于系统内置函数(Arry、Object等)的,不会生效,跳过编译
    2. obj.__proto__.x = 20;
    3. fn.prototype.x=20;
  • 自定义原型对象的改值
    1. fn.prototype = {age:30}; //相当于重新给原型对象赋值,覆盖原来的值
    2. obj.__proto__.x = 20; //修改原型对象里面的属性值
    3. fn.prototype.x=20; //修改原型对象里面的属性值

  1. obj.age = 20;//不会修改obj原型对象里age的值;只会在对象obj里添加或修改age的值
  • 系统内置函数原型对象的改值
    1. 系统内置构造函数的原型属性是不可以修改的,可以操作这个对象的属性

  • 原型对象的取值
    1. var re = obj.age //自己没有就在原型对象里找,也没有就取原型的原型直到null,还没有取undefined

  • 对象直接操作原型(不用prototype, __proto__)

  • f1.life=2 //不管baba是不是原型链上的属性,只在f1本身添加或修改baba属性,不会修改添加原型上的baba属性

  • 如果.语法取到的baba是原型链的属性 虽然不能修改(即不能赋值),但是可以操作

补充:引用知识点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值