继续上一章的案例讲解:

 <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--工厂方法加深引出原型--杂志的更多相关文章

  1. json转js对象方法,JS对象转JSON方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. js 中使用工厂方法和构造器方法

    1 直接创建对象 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  3. js对象拷贝的方法

     对象拷贝的方法是一个难点,尤其是深拷贝.建议把代码都运行下,帮助理解拷贝. 一. json方法 1. 适合情况:  JSON对象的深度克隆.方法是先JSON.stringify() 转为json字符 ...

  4. js对象的所有方法

    Object构造方法 Object.assign() 将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象. Object.create() 用指定的原型对象和属性创建一个新对象. Object ...

  5. JS对象 返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天。如果要返回相对应“星期”,通过数组完成

    返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应"星期",通过数组完成,代码如下: <script type="te ...

  6. JS对象随机数 random() 方法可返回介于 0 ~ 1(大于或等于 0 但小于 1 )之间的一个随机数。 注意:返回一个大于或等于 0但小于1的符号为正的数值

    随机数 random() random() 方法可返回介于 0 ~ 1(大于或等于 0 但小于 1 )之间的一个随机数. 语法: Math.random(); 注意:返回一个大于或等于 0 但小于 1 ...

  7. Objective-C设计模式——工厂方法模式virtual constructor(对象创建)

    工厂方法模式 工厂方法模式可以控制对象的创建过程,屏蔽对象创建的细节,可以直接创建出我们所需要的已经配置好的对象. 工厂方法模式定义了创建方法的接口,让子类决定实例化哪一个类,工厂方法模式使得一个类的 ...

  8. 抽象工厂(Abstract Factory),工厂方法(Factory Method),单例模式(Singleton Pattern)

    在谈工厂之前,先阐述一个观点:那就是在实际程序设计中,为了设计灵活的多态代码,代码中尽量不使用new去实例化一个对象,那么不使用new去实例化对象,剩下可用的方法就可以选择使用工厂方法,原型复制等去实 ...

  9. js 对象的创建方式和对象的区别

    js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 ...

随机推荐

  1. 在C#中保存Bouncy Castle生成的密钥对

    在用Bouncy Castle的C#版API产生公钥和私钥 中产生了一对密钥对,可以用bouncy caslte提供的API进行保存 公钥方面的3个类,具体代码根据命名空间自行查看其源代码: Org. ...

  2. 【linux】pkill 踢在线用户

    [root@Centos ~]# w 01:52:52 up 18 min,  3 users,  load average: 0.00, 0.02, 0.05USER     TTY      FR ...

  3. Android外派(安卓外派) — 长年提供安卓开发工程师外派业务(可签合同)

    北京动点飞扬长年提供安卓工程师外派业务. 平均技术情况如下: 1.2~3年以上Android平台开发经验2.熟练掌握java技术,熟悉面向对象编程设计3.熟悉Android应用开发框架及Activit ...

  4. SSH_框架整合4--添加员工信息

    SSH_框架整合4--添加员工信息 一. 1 index.jsp:添加:<a href="emp-input">添加员工向信息:Add Employees' Infor ...

  5. C语言每日一题之No.9

    再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规 ...

  6. xubuntu手记

    一. xfce下intelij快捷键冲突 window manager 快捷键 keyboard快捷键

  7. 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 ...

  8. [Mysql] MySQL配置文件my.cnf的理解

    一.缘由 最近要接手数据库的维护工作,公司首选MySQL.对于MySQL的理解,我认为很多性能优化工作.主从主主复制都是在调整参数,来适应不同时期不同数量级的数据. 故,理解透彻my.cnf里的参数是 ...

  9. 使用C#的is和as操作符来转型

    开发人员经常需要将一个对象从一种类型转换为其他各种类型.C#不要求任何特殊语法即可将一个对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换.然而,将对象转换为它的某个派生类型时,C ...

  10. centos6.5安装配置fastdfs+nginx实现分布式图片服务器

    一.准备 yum groupinstall -y "Development Tools"yum install -y wget libevent-devel pcre-devel ...