前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义类型的创建

自定义类型的创建

作者头像
就只是小茗
发布2018-12-07 11:00:23
1.1K0
发布2018-12-07 11:00:23
举报

创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。

代码语言:javascript
复制
 1 window.onload = function() {
 2     var person1 = new Person("Nicholas", 29, "Software Engineer");
 3     var person2 = new Person("Greg", 27, "Doctor");
 4 
 5     person1.friends.push("Van");
 6 
 7     document.writeln("person1.friends : " + person1.friends + "<br />");    // Shelby,Court,Van
 8     document.writeln("person2.friends : " + person2.friends + "<br />");    // Shelby,Court
 9     document.writeln("person1.friends === person2.friends : " + (person1.friends === person2.friends) + "<br />");    // false
10     document.writeln("person1.sayName === person2.sayName : " + (person1.sayName === person2.sayName) + "<br />");    // true
11 };
12 
13 /**
14  * 构造函数模式用于定义实例属性
15  * @param {string} name 姓名
16  * @param {number} age  年龄
17  * @param {string} job  工作
18  */
19 function Person(name, age, job){
20     this.name = name;
21     this.age = age;
22     this.job = job;
23     this.friends = ["Shelby", "Court"];
24 
25     // 动态原型模式,该代码只有在初次调用构造函数的时候才会执行
26     if (typeof this.sayName !== "function") {
27         Person.prototype.sayName = function() {
28             alert(this.name);
29         }
30     }
31 }

 以上方法,对于有其他OO语言经验的开发人员去看,比较容易理解,但是性能上并不推荐。因为每次创建新的实例都需要进行一次判断,哪怕这次的性能损耗是极小的,但毕竟也是有损耗。

我还是将定义方法和共享属性放在外面,通过原型模型去创建自定义方法,如果有更加优质的代码,欢迎分享!

代码语言:javascript
复制
 1 window.onload = function() {
 2     var person1 = new Person("Nicholas", 29, "Software Engineer");
 3     var person2 = new Person("Greg", 27, "Doctor");
 4 
 5     person1.friends.push("Van");
 6 
 7     document.writeln("person1.friends : " + person1.friends + "<br />");    // Shelby,Court,Van
 8     document.writeln("person2.friends : " + person2.friends + "<br />");    // Shelby,Court
 9     document.writeln("person1.friends === person2.friends : " + (person1.friends === person2.friends) + "<br />");    // false
10     document.writeln("person1.sayName === person2.sayName : " + (person1.sayName === person2.sayName) + "<br />");    // true
11 };
12 
13 /**
14  * 构造函数模式用于定义实例属性
15  * @param {string} name 姓名
16  * @param {number} age  年龄
17  * @param {string} job  工作
18  */
19 function Person(name, age, job){
20     this.name = name;
21     this.age = age;
22     this.job = job;
23     this.friends = ["Shelby", "Court"];
24 
25     // 动态原型模式,该代码只有在初次调用构造函数的时候才会执行
26     // if (typeof this.sayName !== "function") {
27     //     Person.prototype.sayName = function() {
28     //         alert(this.name);
29     //     }
30     // }
31 }
32 
33 Person.prototype.sayName = function() {
34     alert(this.name);
35 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档