构造函数与原型

构造函数

构造函数是给对象添加属性,初始化属性用的。

  • 使用new关键字创建的对象,对象的类型就是创建这个对象使用的构造函数的函数名
  • 使用{}创建对象,对象的类型一定是Object,相当于使用了new Object()使用构造函数为其初始化成员
  • 在构造函数调用开始的时候,有一个赋值操作,也就是让this = 刚创建出来的对象
  • 在构造函数中,this就代表刚创建出来的对象
    注意:构造函数时,函数名必须大写
    this指向实例化后的对象

原型

(1) 神秘对象与构造函数

  • 神秘对象就是构造函数的 “原型属性”
  • 简称原型 (构造函数的原型)

(2)神秘对象与构造函数所创建出来的对象

  • 神秘对象针对构造函数创建出来的对象称为 “原型对象”
  • 简称原型 (对象的原型)
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			function Person(name,age){
				this.mingzi=name;
				this.nianling=age;
				this.say=function(){
					console.log('你好')
				}
			}
			//设置添加对象并访问
			Person.prototype.run=function(){    
				console.log('加油')
			}
			Person.prototype.job='软件开发'
			
			var man=new Person('孙悟空',20)
			console.log(man.mingzi);  //孙悟空
			console.log(man.say) 
			
			var wom=new Person()
			console.log(wom.run) 
			console.log(wom.job) //软件开发 
			//在访问对象时,如果构造函数中没有访问到对象(函数也是对象), 则继续会向该函数的上一级访问(原型/神秘对象).
			//所以我们给他的上一级设置添加对象,用【构造函数名 . propotype . 函数名的=function(){}】的方法访问原型
			//因为有指向,所以就不用担心函数名的创建
		</script>
	</body>
</html>

既然所有对象共享神秘对象(构造函数.prototype)内的属性和方法。我们只需要将需要共享的东西,也就是重复占用内存的东西,全部都放到 神秘对象(构造函数.prototype)中。

原型替换

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			function Person(){}
			Person.prototype.name='张三'
			Person.prototype.age='30'
			
			var person1=new Person
			console.log(person1.name);  //张三
			person1.name='李四'  //将李四赋值给  获取的对象(张三)
			console.log(person1.name)//李四  
			
			var person2=new Person();//新实例化一个对象  重新通过构造函数构造对象,
			console.log(person2.name);//张三
		</script>
	</body>
</html>

原型继承

  • 构造函数创建的对象 继承自 构造函数的原型属性
  • 构造函数创建的对象 继承自 该对象的原型对象
    • 原型中的成员, 可以直接被实例对象所使用
    • 实例对象直接 “含有” 原型中的成员
    • 因此实例对象 继承自 原型
    • 这样的继承就是 “原型继承”

关键点

每一个函数在定义的时候,都会有跟它关联的一个对象被创建出来

每一个由构造函数创建出来的对象,都会默认的和构造函数的神秘对象关联

当使用一个方法进行属性或者方法访问的时候,会先在当前对象内查找该属性和方法

如果当前对象内未找到,就回去跟它关联的神秘对象内进行查找

原型链结构

凡是对象就有原型, 原型又是对象, 因此凡是给定义一个对象, 那么就可以找到他的原型, 原型还有原型. 那么如此下去, 就构成一个对象的序列. 称该结构为原型链.

使用构造函数创建出对象, 并且没有利用赋值的方式修改原型, 就说该对象保留默认的原型链.
默认的原型链结构就是:当前对象 -> 构造函数.prototype -> Object.prototype -> null

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值