javascript 高级编程系列 - 创建对象
1. 工厂模式
function createPerson(name, age)
{
var obj = {};
obj.name = name;
obj.age = age;
obj.getName = function(){
return this.name;
};
return obj;
} var person = createPerson('leon', 30);
2. 构造函数模式
function Person(name, age)
{
this.name = name;
this.age = age;
this.getName = function(){
return this.name;
};
} var person = new Person('leon', 30 );
3. 原型模式 (多个对象实例之间共享属性值和方法)
function Person(){
}
Person.prototype = {
constructor: Person,
name: 'leon',
age: 30,
getName: function(){
return this.name;
}
};
var person = new Person();
4. 组合构造函数和原型模式 (构造函数模式与原型模式的结合,属性在构造函数中进行定义,方法在原型中定义)
function Person(name, age)
{
this.name = name;
this.age = age;
} Person.prototype = {
constructor: Person,
getName : function(){
return this.name;
}
}; var person = new Person('leon', 30 );
5.动态原型模式 (原型模式的改进为了更好的体现封装)
function Person(name, age)
{
this.name = name;
this.age = age;
if( typeof this.getName != 'function'){
Person.prototype.getName = function(){
return this.name;
}
}
}
6. 寄生构造函数模式 (工厂模式与构造函数的结合)
1 function Person(name, age)
2 {
3 var obj = {};
4 obj.name = name;
5 obj.age = age;
6 obj.getName = function(){
7 return this.name;
8 };
9 return obj;
10 }
11
12 var person = new Person('leon', 30);
7. 稳妥构造函数模式 (工厂模式的安全版,无公共属性,方法中无this引用)
1 function Person(name, age)
2 {
3 var obj = {};
4 var name = name;
5 var age = age;
6 obj.getName = function(){
7 return name;
8 };
9 return obj;
10 }
11
12 var person = Person('leon', 30);
javascript 高级编程系列 - 创建对象的更多相关文章
- javascript 高级编程系列 - 继承
1. 原型链继承 (缺点:子类继承父类的引用类型的属性值会在各个实例中共享,创建子类实例时无法向父类构造函数传递参数) // 定义父类构造函数 function SuperClass(father, ...
- javascript 高级编程系列 - 基本数据类型
javascript中的基本数据类型包括: Undefined, Null, Boolean, Number, String 5种数据类型 1. Undefined 类型 (只有一个值 undefin ...
- javascript 高级编程系列 - 函数
一.函数创建 1. 函数声明 (出现在全局作用域,或局部作用域) function add (a, b) { return a + b; } function add(a, b) { return a ...
- javascript高级编程笔记01(基本概念)
1.在html中使用JavaScript 1. <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...
- JavaScript高级编程———JSON
JavaScript高级编程———JSON < script > /*JSON的语法可以表达一下三种类型的值 简单值:使用与javas相同的语法,可以在JSON中表达字符串.数值.布尔值和 ...
- JavaScript高级编程———基本包装类型String和单体内置对象Math
JavaScript高级编程———基本包装类型和单体内置对象 <script> var stringObject = new String("hello world") ...
- JavaScript高级编程——Date类型
JavaScript高级编程——Date类型 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...
- JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))
JavaScript高级编程——Array数组迭代(every().filter().foreach().map().some(),归并(reduce() 和reduceRight() )) < ...
- JavaScript高级编程——引用类型、Array数组使用、栈方法
JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...
随机推荐
- Nginx报 No input file specified. 的问题解决之路 转
https://m.aliyun.com/yunqi/articles/34240 今天接手公司的一个项目,照例将项目clone下来,配置本地host,nginx,然后访问. 怎么回事?迅速在php的 ...
- Linux Shell系列教程之(六)Shell数组
本文是Linux Shell系列教程的第(六)篇,更多shell教程请看:Linux Shell系列教程 Shell在编程方面非常强大,其数组功能也非常的完善,今天就为大家介绍下Shell数组的用法. ...
- BZOJ4816 [Sdoi2017]数字表格 【莫比乌斯反演】
题目 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生成了 ...
- 刷题总结——天使玩偶(bzoj2716)
题目: Description Input Output HINT 题解: 学了cdq后近期最后一道题···然而tm还是搞了1个半小时才tm搞出来······ 先说思路:对于绝对值,我们采取类似于旋转 ...
- P3919 (模板)可持久化数组 (主席树)
题目链接 Solution 主席树水题,连差分的部分都不需要用到. 直接用主席树的结构去存一下就好了. Code #include<bits/stdc++.h> #define mid ( ...
- 前端居中模板(常用HTML模板)
0.效果:
- js 路径改变时获取url参数
当我们在使用react或vue的router作路由跳转时,为了保持菜单与地址栏状态一致,我们可以使用window.onhashchange捕获#后面的变化 window.onhashchange = ...
- (39)C#Ping类
一.Ping类 引用命名空间 using System.Net.NetworkInformation 控制台版 using System; using System.Collections.Gener ...
- Codeforces 536C Tavas and Pashmaks(凸壳)
题目链接 Tavas and Pashmaks 题目大意:n个人比赛,游泳和赛跑,游泳距离S,赛跑R.每个人对应两个速度(陆地和水上的),如果存在S,R,使得第i个人胜利,那么输出i 题目要求输出所有 ...
- FreeSql 教程引导
FreeSql是一个功能强大的NETStandard库,用于对象关系映射程序(O/RM),以便于开发人员能够使用 .NETStandard 对象来处理数据库,不必经常编写大部分数据访问代码. 特性 支 ...