Javascript中创建函数的几种方法

1// 工厂函数模式 2// 无法解决对象识别问题 3function person0(name, age, job) { 4 var obj = new Object(); 5 obj.name = name; 6 obj.age = age; 7 obj.job = job; 8 return obj; 9} 10// --------------------------------------------------- 11// 构造函数模式 12function Person(name, age, job) { 13 this.name = name; 14 this.age = age; 15 this.job = job; 16 // 这个方法实例化时,会创建两次 17 this.sayName = function() { 18 alert(this.name); 19 }; 20} 21 22const person1 = new Person("test1", 19, "pig"); 23const person2 = new Person("test2", 19, "dog"); 24 25// --------------------------------------------------- 26// 原型模式 27// 初始化时无法自定义属性 28function Person1() {} 29Person1.prototype.name = "looyulong"; 30Person1.prototype.age = age; 31Person1.prototype.job = job; 32Person1.sayName = function() { 33 alert(this.name); 34}; 35// --------------------------------------------------- 36// 组合构造函数模式 37// 构造函数定义属性,原型模式定义方法 38function Per(name, age, job) { 39 this.name = name; 40 this.age = age; 41 this.job = job; 42} 43 44Per.prototype = { 45 constructor: Per, 46 sayName: function() { 47 alert(this.name); 48 } 49}; 50 51const per1 = new Per("test1", 19, "pig"); 52const per2 = new Per("test2", 19, "dog"); 53 54// --------------------------------------------------- 55// 动态构造模式 56// 就是加了一个判断,判断原型上面是否有对应的方法 57function Person2(name, age, job) { 58 this.name = name; 59 this.age = age; 60 this.job = job; 61 if (typeof this.sayName !== "function") { 62 Person2.prototype.sayName = function() { 63 alert(this.name); 64 }; 65 } 66} 67 68// --------------------------------------------------- 69// 寄生构造函数模式 70// 在构造函数的内部返回一个对象,也就是new的时候返回一个对象 71// 与工厂函数其实没有很大区别,只是在写法上,工厂函数创建对象需要执行一个函数 72// 通过这种模式,可以达到和工厂函数相同的效果,但是却是用new操作符调用的 73function Person3(name, age, job) { 74 var obj = new Object(); 75 obj.name = name; 76 obj.age = age; 77 obj.job = job; 78 obj.sayName = function() { 79 alert(this.name); 80 alert(obj.name); 81 }; 82 return obj; 83} 84 85// --------------------------------------------------- 86// 稳妥构造函数模式 87// 没有公共属性,没有公共属性,不用this 88// 因为有些环境无法是用this和new 89function Person4(name, age, job) { 90 var obj = new Object(); 91 obj.getName = function() { 92 return name; 93 }; 94 obj.getAge = function() { 95 return age; 96 }; 97 obj.getJob = function() { 98 return job; 99 }; 100 obj.sayName = function() { 101 alert(name); 102 }; 103 return obj; 104}
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

List的Select 和Select().tolist()

List<PersondelpnewList<Person{newPerson{Id1,Name"小明1",Age11,Sign0},newPerson{Id2,Name"小明2",Age12,

JavaScript 对象和包装类

对象的创建方法{}varobj{}系统自带的构造函数varobjnewObject()//Array()//Number()自定义的构造函数functionPerson(){}varperson1newPe

Lua基础(对象)

:和.区别.   stu{id100,name"Tom",age21}成员变量   function stu.toString()成员函数    return stu.id .. stu.name .. stu.age   endprint(stu

JavaScript Prototype

定义和用法prototype属性使您有能力向对象添加属性和方法。实例在本例中,将展示如何使用prototype属性来向对象添加属性:<scripttype"text/javascript"functionemployee(name,job,born){this.n