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}
Javascript中创建函数的几种方法
Stella981
2021-10-11
1429 0 0
点赞
收藏
评论区
加载中...