首页 > 编程语言 >javasript定义类的几种方法(推荐)

javasript定义类的几种方法(推荐)

时间:2023-05-08 16:23:19浏览次数:32  
标签:function console 定义 age name log return 几种 javasript

1.工厂模式

function createObject(name,age){

var obj = new Object();

obj.name = name;

obj.age = age;

obj.getName = function(){

return this.name;

};

obj.getAge = function(){

return this.age;

}

return obj;

}

var obj2 = createObject("王五",19);

console.log(obj2.getName());

console.log(obj2.getAge());

console.log(obj2.constructor);

工厂模式的方法创建对象,工厂模式可以根据接受的参数来创建一个包含必要信息的对象,可以无限次数的调用这个方法,每次都返回一个包含2个属性2个方法的对象。工厂模式解决了创建类似对象的问题,但没有解决对象的识别问题,即不能确定一个对象的类别,统一为Object。

2.构造函数法

function Person(name,age,job){

this.name = name;

this.age = age;

this.job = job;

}

Person.prototype = {

constructor:Person,

getName:function(){

return this.name;

},

getAge:function(){

return this.age;

},

getJob:function(){

return this.job;

}

}

var p = new Person("二麻子",18,"worker");

console.log(p.constructor);

console.log(p.getName());

console.log(p.getAge());

console.log(p.getJob());

构造函数的方式虽然确定了对象的归属问题,能够确定对象的类型,但构造函数中的方法需要在每个对象中都要重新创建一遍,导致一些性能问题。

3.原型模式

function Person(){

 

}

Person.prototype = {

constructor:Person,

name:"张三",

age:21,

job:"teacher",

getName:function(){

return this.name;

},

getJob:function(){

return this.job;

}

}

 

var p = new Person();

console.log(p.getName()); //张三

console.log(p.getJob()); //teacher

var p2 = new Person();

p2.name = "李四";

console.log(p2.getName()); //李四

由实例代码我们可以知道,对象实例可以访问原型中的值,但不能重写原型中的值,如果对象实例中定义了和原型重名的属性,那么该属性就会屏蔽原型中的那个属性,但并不会重写。

4.封装(暂且这么叫吧)

var Dog = {

createDog:function(){

var dog = {};

dog.name = "汪汪";

dog.sayHello = function(){

console.log("Hello World!");

};

return dog;

}

};

var dog = Dog.createDog();

dog.sayHello();

就是把代码都封装起来,将实例对象作为一个整体返回,有点类似于工厂模式。

标签:function,console,定义,age,name,log,return,几种,javasript
From: https://www.cnblogs.com/lucken2000/p/17382187.html

相关文章

  • vue2自定义组件@click点击失效问题及解决
    1.参照官方文档,可以用@click.native=“click”解决2.$emit组件之间事件传递解决https://www.jb51.net/article/246610.htm......
  • Java 几种任务调度的实现方法与比较
    几种任务调度的Java实现方法与比较综观目前的Web应用,多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的Java实现方法,包括Timer,Scheduler,Quartz以及JCronTab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考。 任务调度是指......
  • 若依--自定义指令 v-hasPermi 和 v-hasRole
    为什么大家都在用若依?若依版本有很多种,前端的,后端的,大家点击去看看http://doc.ruoyi.vip/,看完记得回来!第一次接触到若依是进入这家公司之后,以前做项目都是“白手起家”,若依项目结构清晰,很多轮子都被造好了,不用自己搭建项目,gitclone就完成了,happy!还有项目文档可以查看,虽然我......
  • C# DataGridView自定义排序
    privatevoiddgvScanFai_SortCompare(objectsender,DataGridViewSortCompareEventArgse){if(e.Column.Name=="Time"){stringcellValue1=e.CellValue1.ToString();stringcellValu......
  • 几种常见的Python数据结构
    摘要:本文主要为大家讲解在Python开发中常见的几种数据结构。本文分享自华为云社区《Python的常见数据结构》,作者:timerring。数据结构和序列元组元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值:In[1]:tup=4,5,6当用复杂的......
  • ArcGIS将自己的Python代码作为工具箱或自定义工具
      本文介绍在ArcMap软件中,通过已有的Python脚本程序,建立新的工具箱并在其中设置自定义工具的方法。  通过本文介绍的操作,我们便可以实现将自己的Python代码封装,并像其他ArcGIS已有工具一样,进行界面化的地理处理操作。  话不多说,我们开始具体操作。首先,在ArcMap中打开“ArcT......
  • delphi FastReport 自定义预览窗口显示报表
    FastReport自定义预览窗口显示报表属性和方法TfrxReport.PreviewpropertyPreview:TfrxCustomPreview;指向TfrxPreview组件的链接,在其中显示完成的报表。如果此属性为空,则在标准预览窗口中显示报表。TfrxPreviewTfrxPreview组件是为创建自定义预览窗口而设计的。要显......
  • Springboot 自定义Web容器
    Springboot自定义Web容器如果你的项目并发量比较高,想要修改最大线程数、最大连接数等配置信息,可以通过自定义Web容器的方式,代码如下所示。@SpringBootApplication(proxyBeanMethods=false)publicclassAppimplementsWebServerFactoryCustomizer<ConfigurableServletWebSer......
  • 【web 开发基础】PHP 中数组的定义和使用
    前言在PHP中定义数组非常灵活。与其他许多编程语言中的数组不同,PHP不需要在创建数组时指定数组的大小和类型,甚至无需再使用数组前先行声明,也可以在同一个数组中存储任何类型的数据,PHP支持一维和多维数组,可以由用户创建,也可以由一些特定的数据库处理函数从数据库查询中生成数组,或者......
  • 使用 NutUI 搭建「自定义业务风格」的组件库 | 京东云技术团队
    本文介绍,如何使用NutUI组件库,搭建一套为专属业务风格的业务组件库。NutUI是一款京东风格的移动端组件库。NutUI目前支持Vue和React技术栈,支持Taro多端适配。当下的实现方式一般组件库,都会给用户提供修改主题的方式。比如在NutUI组件库中,给用户提供了两种方式:修改CSS变量,Nu......