美文网首页Web 前端开发 让前端飞js
构造函数和原型及两者作用

构造函数和原型及两者作用

作者: Nice先生的狂想曲 | 来源:发表于2019-10-16 23:52 被阅读0次

前言

在ES6之前,对象不是基于类创建的,而是用一种称为构造函数的特殊函数来定义对象和它们的特征。


而在此之前,我们创建对象的方法有如下几点。

创建对象方法
  1. 利用new Object()创建对象
var obj1=new Object(); 
  1. 利用对象字面量创建对象
var obj1={};
  1. 利用构造函数创建对象
function Person(uname,age){
   this.uname=uname;
   this.age=age;
   this.sing=function(){
     console.log("唱歌")
 }
}

构造函数

实例成员

构造函数内部通过this添加的成员,实例成员只能通过实例化对象访问

静态成员

构造函数本身上添加的成员,静态成员只能通过构造函数访问,例:

Person.sex ="男";
构造函数问题

创建多个对象,实例方法成员会创建多个内存空间存放

构造函数原型 prototype

原因:由于创建多个对象时实例方法成员创建多个内存空间,造成资源浪费
概念:构造函数的原型prototype指向另一个对象(又称原型对象),而这个原型对象的所有属性方法都会被构造函数所拥有。因此通过原型分配的函数是所有对象所共享的。
作用:原型主要作用为共享方法

方法查找规则:
先看对象中是否存在该方法,如果有就执行对象中的方法,如果没有则因为有对象的 __ proto __ 的隐式存在,则去查找构造函数中原型对象的方法。即实例对象的__ proto __指向构造函数的原型对象

对象原型与构造函数原型对象的constructor属性均指向函数本身。

person.proto.constructor=Person.prototype.constructor=Person

图解 构造函数、原型对象与对象原型的关系

但如果方法太多,你可能会这样

Person.prototype ={
  sing:function(){}
  dance:function(){}
}

此时,Person.prototype.constructor不存在,可以添加

Person.prototype ={
  constructor:Person,
  sing:function(){}
  dance:function(){}
}

相关文章

  • 构造函数和原型及两者作用

    前言 在ES6之前,对象不是基于类创建的,而是用一种称为构造函数的特殊函数来定义对象和它们的特征。 而在此之前,我...

  • JS博客

    JS构造函数及new运算符 JS原型对象和原型链 函数作用域和作用域链 干货分享:让你分分钟学会JS闭包 深入理解...

  • 面向对象之原型对象和其他补充

    原型对象概念 原型对象的作用 如何访问构造函数的原型对象 ① 构造函数.protoType ② 对象.__prot...

  • js

    闭包和作用域 原型和原型链 所有原型链的终点都是 Object 函数的 prototype 属性每一个构造函数都拥...

  • 原型链

    原型链图示 对象拥有原型和构造函数--proto--   原型constructor   构造函数 只有函...

  • 前端面试题总结【37】:javascript对象的几种创建方式

    工厂模式 构造函数模式 原型模式 混合构造函数和原型模式 动态原型模式 寄生构造函数模式 稳妥构造函数模式 推荐:...

  • JavaScript的原型链

    首先介绍下原型~原型的作用:把方法放到原型中,就可以让同类型的对象共享 。 当我创建一个构造函数。构造函数里有原型...

  • 第六章 创建对象

    构造函数 constructor和instanceof区别 构造函数和普通函数区别 原型模式理解原型对象isPro...

  • 面向对象知识点总结

    构造函数和原型 能够使用构造函数创建对象 能够说出原型的作用 能够说出访问对象成员的规则 能够使用es5新增的一些...

  • 构造函数-js-高级程序设计-第六章笔记

    前言 理解对象 创建对象构造函数模式原型模式组合使用构造函数模式和原型模式动态原型模式寄生构造函数模式稳妥构造函数...

网友评论

    本文标题:构造函数和原型及两者作用

    本文链接:https://www.haomeiwen.com/subject/vbsumctx.html