Javascript(七)原型对象和原型链(继承)

原型对象

1.概念:对象的原型模型对象称为原型对象,对象自己没有的属性和方法,原型对象上有的对象可以去引用
eg:

function fn (name) {
	 	this.name=name
	 }
fn.prototype={age:18}//fn{prototype:{age:18}}
var fm=new fn("Alice")//fm{__proto__:{age:18},name:Alice}
console.log(fm.name)//Alice
 console.log(fm.age)//取数据时对象自己没有age属性就去原型对象上找,如果原型对象没有就去原型对象的原型对象找直到null,会返回undfined,所以age为18

存数据

 function fn () {
			 	this.name="Alice"
			 	this.age=18
			 }
			 fn.prototype.its={html}
			 var f1=new fn()
			 f1.its="css"
			 
			 var f2=new fn()
			 f2.class="012"
			 
			 console.log(f1)//{__proto:{its:html},name:"Alice",age:18,its:css}存数据时不管原型对象有没有这个属性,都会给对象自己加
			 console.log(f2)//{__proto:{its:html},name:"Alice",age:18, class:012}

2.构造函数的第一个字母要大写(没有规定必须大写,但是一般为了跟普通的函数区别开,要大写)
3.每一个函数都有一个属性叫length 是形参的个数(形参个数和实参个数不一定一样多)
4.每一个函数都有一个属性叫prototype==>每一个对象(引用数据)都有一个__proto__
5.如果没有为函数指定prototype属性,系统会为每一个函数内置一个空对象:{}
6.构造函数如果是系统提供的,它的prototype属性指向的对象 只能修改成员,不能把整个对象修改了(不会报错);构造函数如果是自己写的,它的prototype属性指向的对象 可以随意操作
eg:

 Array.prototype={name1:"xxxx"};//不能把整个对象修改,这是错误的
 Array.prototype.name="Alice"//可以通过语法糖修改对象成员的属性

7.修改一个对象的原型对象的功能,只能通过prototype或者__proto__
8.函数创建出来的对象 的原型对象不是这个函数对象==>obj.__proto__不是fn函数也不是fn.proto 它是fn.prototype

原型链

1.取数据时:
如果对象自己没有那个属性 就会去原型上访问,原型没有就去原型的原型上访问
直到null没有返回undefined 这个就是原型链。
eg

var obj = new fn()
   			fn.prototype
   			fn.__proto__
   			obj.__proto__
   			obj.__proto__ === fn.prototype
   			fn.__proto__.__proto__.__proto__ === null
   			obj.__proto__.__proto__===null
   			//fn.__proto__.__proto__ === 系统提供的对象
   			//obj.__proto__===系统提供的对象

可画图来理解原型链

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值