函数的原型

本文详细介绍了JavaScript中的原型概念,包括原型的作用、访问方法和如何给原型对象添加属性和方法。阐述了构造函数.prototype的关系,以及原型对象中的constructor属性。同时讨论了属性搜索原则和对象通过__proto__访问原型的机制,强调了在替换原型对象时对constructor属性的处理,以保持构造函数与原型之间的关联性。
摘要由CSDN通过智能技术生成

原型是什么?

  • 在构造函数创建对象的时候,系统会默认自动为其创建并关联一个对象,这个对象就是原型
  • 原型默认是一个空的对象
  • prototype是构造函数的一个属性,它将构造函数和原型关联起来(prototype会创建出一个process对象,该对象可以访问构造函数的原型中的成员)
  • 原型对象被创建出来的时候会包含一个默认属性constructor,这个属性存储了构造函数的地址
  • 只有函数function才具有prototype属性。这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。



原型的作用

原型中的属性和方法可以被使用该构造函数创建出来的的所有对象使用




原型的访问方法

构造函数.prototype



给原型对象添加属性和方法:

  • 方法一:使用对象的动态特性给原型添加方法

构造函数.prototype.属性/方法

例如:


// 当使用构造函数创建的对象访问属性和方法时,先从构造函数内部寻找,
// 如果没有再从原型寻找(如果没有,属性就报undefind,方法就报错not function)。
// 所以构造函数本身和它的原型有同一个方法时,用构造函数自己的
function Person(){
   
	this.name = "cuihao";
};

Person.prototype.name = 'GGOO'

var aa = new Person()

aa.name // 'cuihao'


// 给构造函数的原型添加属性和方法一般使用动态特性添加,动态特性有两种方法,
// 一种是Person.prototype.girlFriend这种点语法,
// 一种是方括号语法Person.prototype[girlFriend]
Person.prototype["boyFriend"] = function(){
   
  console.log("帅哥")
};


  • 方法二:直接替换原型对象法

通过对象字面量方式给原型对象直接添加属性和方法


function Person(){
   };

// 通过对象字面量方式给原型直接添加属性和方法
Person.prototype = {
   
    name: "cuihao",
    say: function(){
   
        console.log("nihao")
    }
};

var cui = new Person();
cui.say();

使用直接替换原型对象法,会出现以下问题:
在替换原型之前创建的原型对象,和替换之后创建的新原型对象不是同一个,替换之后的新原型对象会从新开辟一块内存空间,替换之前的原型的方法和属性不能被替换之后再实例化出来的的对象所使用

 
 function Person(){
   };
 
 // 直接给原型添加方法和属性
 Person.prototype.say = function(){
   
     console.log("这是替换之前的原型的方法");
 };
 
 // 在直接替换原型对象之前实例化出来的对象,可以访问原先原型对象的方法和属性
 var cui = new Person();
 cui.say();

 // 直接替换原型对象法
 Person.prototype = {
   
     sayHello: function
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值