js对象3--工厂方法加深引出原型--杂志
继续上一章的案例讲解:
<script type="text/javascript">
function createPreason(name,sex){ //他的怪癖,喜欢参数
var person= new Object(); //创建一个对象
person.name = name; //给对象添加一个name属性
person.sex = sex; //给对象添加一个sex属性
person.sayName= function(){
alert("大家好我是:"+this.name); // 打印出:传进来的参数name的真正值 这里的this代表调用该方法的对象
}
person.saySex= function(){
alert("性别:"+this.sex); // 打印出:传进来的参数sex的真正值 这里的this代表调用该方法的对象
}
return person; //返回对象
} var p1 = createPreason("小龙哥","男"); //调用工厂模式创建对象p1
var p2 = createPreason("小龙女","女"); //调用工厂模式创建对象p2
p1.sayName(); //打印出 大家好我是:小龙哥
p1.saySex(); //打印出 性别:男
p2.sayName(); //打印出 大家好我是:小龙女
p2.saySex(); //打印出 性别:女
</script>
我们说到 js的关键字this代表的是--》调用该函数的对象(通俗易懂的一句话:当前的函数属于谁)
这个说法没毛病:四海皆知嘛。
但是有一点不知:
一:函数前面有new的时候
<script type="text/javascript">
function createPreason(name,sex){ //他的怪癖,喜欢参数
this.name = name; //给对象添加一个name属性
this.sex = sex; //给对象添加一个sex属性
this.sayName= function(){
alert("大家好我是:"+this.name); // 打印出:传进来的参数name的真正值 这里的this代表调用该方法的对象
}
this.saySex= function(){
alert("性别:"+this.sex); // 打印出:传进来的参数sex的真正值 这里的this代表调用该方法的对象
} } var p1 =new createPreason("小龙哥","男"); //调用工厂模式创建对象p1
var p2 =new createPreason("小龙女","女"); //调用工厂模式创建对象p2
p1.sayName(); //打印出 大家好我是:小龙哥
p1.saySex(); //打印出 性别:男
p2.sayName(); //打印出 大家好我是:小龙女
p2.saySex(); //打印出 性别:女
</script>
这次的改进:函数createPreason()前面有new。函数内部的调整
1.去掉了函数里面的对象创建
2.去掉了return 返回
3.对象的调用换成了this
为什么这样改进呢?改进后的js内部如何执行的呢?
<script type="text/javascript">
function createPreason(name,sex){ //他的怪癖,喜欢参数
//假象系统内部自动构造出一个对象,这个对象赋值给了this
//var this = new Object(); this.name = name; //给对象添加一个name属性
this.sex = sex; //给对象添加一个sex属性
this.sayName= function(){
alert("大家好我是:"+this.name); // 打印出:传进来的参数name的真正值 这里的this代表调用该方法的对象
}
this.saySex= function(){
alert("性别:"+this.sex); // 打印出:传进来的参数sex的真正值 这里的this代表调用该方法的对象
}
//假象系统内部自动返回了
// return this;
} var p1 = new createPreason("小龙哥","男"); //调用工厂模式创建对象p1
var p2 =new createPreason("小龙女","女"); //调用工厂模式创建对象p2
p1.sayName(); //打印出 大家好我是:小龙哥
p1.saySex(); //打印出 性别:男
p2.sayName(); //打印出 大家好我是:小龙女
p2.saySex(); //打印出 性别:女
</script>
假象系统给我们函数内部添加了对象与return返回,我们只需要在里面添加想要的数据就行了。
一个总结:1.函数外面加new,里面不加new。相反:函数外面不加new,里面加new.
2.函数前面加new,系统会自动在函数的内部新创建一个对象赋值给this
再举一个例子加深印象:
function show (){
alert(this);
}
show(); //执行到这一步打印出:window (全局函数默认属于window, window.show() )
new show() //执行到这一步打印出:object
/**
function show(){
//假象系统内部执行流程
11 var this = new Object();
alert(this)
}
new show(); //执行到这一步打印出:objec
** /
好了this与new讲的差不多了,继续看下面
2.解决浪费--引出原型
还好现在的电脑内存大,够用,所以浪费的起那是任性,但是做程序必须做到能省则省的原则
案例求一个数组的和:
1 var arr1 = new Array(22,44,1,6,7); //也可以使用直接量创建 var arr1 = [22,44,1,6,7];
2 arr1.sum = function(){ //给数组arr1添加一个方法sum
3 var result = 0 //求和
4 var i = 0; //一个小的性能优化 不用每次for循环的时候都声明并初始化一个变量 i = 0
5 for(i = 0; i<this.length; i++){ //this 代表调用函数的对象为arr1
6 result+= this[i];
7 }
8 return result;
9 }
10 alert(arr1.sum()); //
要是我有很多个这样的数组要求和呢?
我们只是给arr1添加了一个求和的方法其他的数组没有这个方法,所以不能求其他的数组和(有人说还不如使用一个函数呢---恩,有道理。)
接下来就是该网上,书上...广泛流程的原型登场了。
js对象3--工厂方法加深引出原型--杂志的更多相关文章
- json转js对象方法,JS对象转JSON方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- js 中使用工厂方法和构造器方法
1 直接创建对象 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- js对象拷贝的方法
对象拷贝的方法是一个难点,尤其是深拷贝.建议把代码都运行下,帮助理解拷贝. 一. json方法 1. 适合情况: JSON对象的深度克隆.方法是先JSON.stringify() 转为json字符 ...
- js对象的所有方法
Object构造方法 Object.assign() 将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象. Object.create() 用指定的原型对象和属性创建一个新对象. Object ...
- JS对象 返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天。如果要返回相对应“星期”,通过数组完成
返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应"星期",通过数组完成,代码如下: <script type="te ...
- JS对象随机数 random() 方法可返回介于 0 ~ 1(大于或等于 0 但小于 1 )之间的一个随机数。 注意:返回一个大于或等于 0但小于1的符号为正的数值
随机数 random() random() 方法可返回介于 0 ~ 1(大于或等于 0 但小于 1 )之间的一个随机数. 语法: Math.random(); 注意:返回一个大于或等于 0 但小于 1 ...
- Objective-C设计模式——工厂方法模式virtual constructor(对象创建)
工厂方法模式 工厂方法模式可以控制对象的创建过程,屏蔽对象创建的细节,可以直接创建出我们所需要的已经配置好的对象. 工厂方法模式定义了创建方法的接口,让子类决定实例化哪一个类,工厂方法模式使得一个类的 ...
- 抽象工厂(Abstract Factory),工厂方法(Factory Method),单例模式(Singleton Pattern)
在谈工厂之前,先阐述一个观点:那就是在实际程序设计中,为了设计灵活的多态代码,代码中尽量不使用new去实例化一个对象,那么不使用new去实例化对象,剩下可用的方法就可以选择使用工厂方法,原型复制等去实 ...
- js 对象的创建方式和对象的区别
js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 ...
随机推荐
- 在C#中保存Bouncy Castle生成的密钥对
在用Bouncy Castle的C#版API产生公钥和私钥 中产生了一对密钥对,可以用bouncy caslte提供的API进行保存 公钥方面的3个类,具体代码根据命名空间自行查看其源代码: Org. ...
- 【linux】pkill 踢在线用户
[root@Centos ~]# w 01:52:52 up 18 min, 3 users, load average: 0.00, 0.02, 0.05USER TTY FR ...
- Android外派(安卓外派) — 长年提供安卓开发工程师外派业务(可签合同)
北京动点飞扬长年提供安卓工程师外派业务. 平均技术情况如下: 1.2~3年以上Android平台开发经验2.熟练掌握java技术,熟悉面向对象编程设计3.熟悉Android应用开发框架及Activit ...
- SSH_框架整合4--添加员工信息
SSH_框架整合4--添加员工信息 一. 1 index.jsp:添加:<a href="emp-input">添加员工向信息:Add Employees' Infor ...
- C语言每日一题之No.9
再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规 ...
- xubuntu手记
一. xfce下intelij快捷键冲突 window manager 快捷键 keyboard快捷键
- CF 500 B. New Year Permutation 并查集
User ainta has a permutation p1, p2, ..., pn. As the New Year is coming, he wants to make his permut ...
- [Mysql] MySQL配置文件my.cnf的理解
一.缘由 最近要接手数据库的维护工作,公司首选MySQL.对于MySQL的理解,我认为很多性能优化工作.主从主主复制都是在调整参数,来适应不同时期不同数量级的数据. 故,理解透彻my.cnf里的参数是 ...
- 使用C#的is和as操作符来转型
开发人员经常需要将一个对象从一种类型转换为其他各种类型.C#不要求任何特殊语法即可将一个对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换.然而,将对象转换为它的某个派生类型时,C ...
- centos6.5安装配置fastdfs+nginx实现分布式图片服务器
一.准备 yum groupinstall -y "Development Tools"yum install -y wget libevent-devel pcre-devel ...