文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

web前端:JS面向对象——动态原型模型、寄生构造模型

代码小侠客

代码小侠客

2024-04-23 23:07

关注

  {{C++语言}}为类提供的构造函数可自动完成对象的初始化任务,全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到相应语句时才被调用。然而给出一个外部对象的引用性声明时,并不调用相应的构造函数,因为这个外部对象只是引用在其他地方声明的对象,并没有真正地创建一个对象。

  动态原型模型

  组合使用构造函数模型和原型模型,使得OO语言程序员在看到独立的构造函数和原型时很困惑。动态原型模型致力于解决该问题,它把所有的信息封装在构造函数中,通过在构造函数中初始化原型(仅在必要情况下),同时又使用构造函数和原型的优点。

  实例代码如下:

  <!DOCTYPEhtml>

  <html>

  <head>

  <title>动态原型模型</title>

  <scripttype="text/Javascript">

  //动态原型模型:把所有的信息封装在构造函数中。通过在构造函数中初始化原型(仅在必要情况),又保持了同时使用构造函数和原型模型的优点。

  functionStudent(name,age,sex){

  this.name=name;

  this.age=age;

  this.sex=sex;

  this.friends=["Kitty","Court"];

  if(typeofthis.sayName!="function"){

  //不能使用对象字面量重写原型

  Student.prototype.sayName=function(){

  alert(this.name);

  };

  }

  }

  varstu1=newStudent("Lucy",10,"girl");

  stu1.sayName();

  varstu2=newStudent("Bob",9,"boy");

  stu2.sayName();

  stu1.friends.push("Van");

  alert(stu1.friends);//"Kitty,Court,Van"

  alert(stu2.friends);//"Kitty,Court"

  alert(stu1.friends===stu2.friends);//false

  alert(stu1.sayName===stu2.sayName);//true

  </script>

  </head>

  <body>

  </body>

  </html>

  寄生构造函数模型

  基本思想:创建一个函数,该函数作用仅仅是封装创建对象的代码,然后返回新创建的对象。

  以下代码说明该模型基本思想:

  <!DOCTYPEhtml>

  <html>

  <head>

  <title>寄生构造函数模型</title>

  <scripttype="text/javascript">

  functionStudent(name,age,sex){

  varo=newObject();

  o.name=name;

  o.age=age;

  o.sex=sex;

  o.friends=["Kitty","Court"];

  o.sayName=function(){

  alert(this.name);

  };

  returno;

  }

  varstu1=newStudent("Lucy",10,"girl");

  stu1.sayName();

  alert(stu1instanceofStudent);//false

  alert(stu1instanceofObject);//true

  </script>

  </head>

  <body>

  </body>

  </html>

  注:返回的对象与构造函数或者与构造函数的原型属性之间没有任何关系;即:构造函数返回的对象与在构造函数外部创建的对象没什么不同。不能依赖instanceof操作符来确定对象类型。

  这种模式常用在特殊情况下为对象创建构造函数。

  构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯