JavaScript—构造函数、原型对象和原型链

1.构造函数

  构造函数和普通函数的区别:
   1.构造函数的函数名习惯上首字母大写。
   2.构造函数需要new关键字来调用。

构造函数为:

   function Person(name,age,gender){
				this.name=name;
				this.age =age;
				this.gender=gender;
				this.text=function (){
					document.write("这是一个函数");
				}
			}

构造函数创建对象:

var per=new Person("孙悟空",18,"男");
var per2=new Person("猪八戒",17,"男");

注:使用同一构造函数创建的对象称为一类对象,也将该构造函数成为一个类,所创建的对象称为该类的实例。
注:可用instanceof检查某个对象是否是一个类的实例 per instanceof Person

2.原型对象

第一:prototype属性
(1).函数的内部都有一个属性:prototype, 该属性默认指向一个原型对象;
(2).该原型对象中有一个constructor属性,该属性指向本函数对象;
(则函数与它的原型对象可以相互转换、指向。fun.prototype.constructor=fun)
原型对象:就是一个空Object对象

在这里插入图片描述

第二:显示原型与隐式原型
(1).每个函数都有一个prototype属性,即显式原型
(2).该函数的实例对象都有一个__proto__属性,即隐式原型

 *实例对象的__proto__属性指向原型对象
 *即函数的显式原型和函数实例的隐式原型指向相同,都指向原型对象
 
 *通过函数的显式原型prototype可以给原型对象添加属性或方法。
 *该函数的所有实例对象都可以用原型中的属性与方法。
 
  给原型对象添加属性或方法:
    Fun.prototype.a=1000
	Fun.prototype.test=function(){
		console.log('123');
	}

在这里插入图片描述

原型对象的作用:
原型对象相当于一个公共区域,函数所有的实例都可访问,则可将共有的属性或方法都统一添加到原型对象中,这样可以不用分别添加,也不会影响到全局的作用域。

3.原型链:

别名:隐式原型链 (沿着__proto__的这条链)
作用:查找函数实例对象的属性(方法)

访问一个函数实例对象的属性或方法时,会按照原型链来查找:

  1.先在对象自身中找,找到就可返回
  2.如果没有,再沿着__proto__这条链向上查找,一直找到原型的尽头,找到返回     (先在原型对象中找,找不到就在原型的原型中找)
  3.如果最终没有找到,返回undefined;

原型链的结构:
在这里插入图片描述
*Object的原型对象是原型链的尽头,toString等方法都是放在了Object的原型对象中。
*实例对象的原型的原型是Object的显式原型

4. 扩展方面

所有对象都是Function的实例
var obj = new Object()
所有函数都是Function的实例(包括自身)
var fun = new Function()
Object是Function的实例

5.instanceof的判断

instanceof:用来判断一个对象是否为一个函数的实例对象;
若A instanceof B ,则判断A是否为B的实例对象,若是则返回true,若不是返回false;

instanceof是如何判断的??
*表达式: A instanceof B
*如果B函数的显式原型在A对象的原型链上,返回true,否则返回false
(B的显式原型在A的原型链上就可以,不管是哪级隐式原型链)

在这里插入图片描述

6.练习

在这里插入图片描述

<script type="text/javascript">
   	function F (){}
   	Object.prototype.a=function(){    //a添加到Object的原型
   	    console.log("a()");
   	   }
   	Function.prototype.b=function(){   //b添加到Function的原型
   		console.log("b()");
   	}
 
    var f =new F();
    f.a();   
    //返回a(),他会先在f中找,找不到就去原型中找,
    //再找不到,就去f的原型的原型中找,
    //f的原型的原型,就是Object.prototype;
    //f.b();
    //返回undefined,在原型链尽头也没有;
    F.a();
    //返回a()
    //函数的原型对象就是一个object空对象,
    //则函数原型的原型就是Object.prototype;
    F.b();
    //返回b()
    // var F=new Function();
    // F则为Function的实例,可访问原型对象中的内容   
  </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值