javascript创建对象的方法--构造函数模式

一、总结

构造函数模式作用和不足

1、作用:解决工厂模式不是用new关键字来创建对象的弊端

2、作用:解决工厂模式创建的实例和模型没有内在联系的问题

3、不足:无法解决工厂模式不同实例对应于不同内存的问题(内存浪费),这个用原型模式可以解决

二、javascript创建对象的方法--构造函数模式(需仔细看

构造函数模式

  1. new 调用的函数为构造函数,构造函数和普通函数区别仅仅在于是否使用了new来调用。
  2. 所谓“构造函数”,就是专门用来生成“对象”的函数。它提供模板,作为对象的基本结构。
  3. 构造函数内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。
  4. instanceof 验证原型对象与实例对象之间的关系。
  5. 使用call和apply方法实现对象的冒充
  6. 问题:浪费内存--使用构造函数每生成一个实例,都增加一个重复的内容,多占用一些内存。这样既不环保,也缺乏效率。

三、代码

代码一:

 <!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>课堂演示</title>
</head>
<body>
<script>
//基本模式
var people1=new Object();
people1.name='孙悟空';
people1.weapon='金箍棒';
people1.run=function(){
return this.name+'的武器是'+this.weapon
}
// alert(people1.name)
//alert(people1.run()) //注意方法的调用需要加()
//该方法如果创建多个对象就会比较繁琐,如下......
var people2=new Object();
people2.name='猪八戒';
people2.weapon='钉耙';
people2.run=function(){
return this.name+'的武器是'+this.weapon
}
//工厂模式
function creatPeople(name,weapon){
var people=new Object() //可以类比为加工对象的原材料
people.name=name;
people.weapon=weapon;
people.run=function(){
return this.name+'的武器是'+this.weapon
} //以上步骤可以类比为加工对象的过程
return people //注意一定要讲创建的对象返回
//可以类比为产品加工完毕出厂的工作
}
var wukong=creatPeople('孙悟空','金箍棒');
var bajian=creatPeople('猪八戒','钉耙');
//alert(wukong.run)
//alert(bajian.run)
//alert(wukong.run==bajian.run)//两个对象实例的地址是不同的,说明两个对象会占用两个地址空间的内存
//new 关键字
function fun(){
alert(this)
}
//fun()
//new fun() //如果有new 函数里的this就是新创建出来的对象,如果没有就是Window
//构造函数模式
//注意:构造函数不需要使用 return语句返回对象,它的返回是自动完成的
function People(name,weapon){
this.name=name;
this.weapon=weapon;
this.run=function(){
return this.name+'的武器是'+this.weapon
}
}
var wujing=new People('沙悟净','禅杖');
alert(wujing.run())
</script>
</body>
</html>

1、原型模式(内存浪费):原型模式的不同实例分配到不同的内存

2、this用法:普通函数,如果有new 函数里的this就是新创建出来的对象,如果没有就是Window

3、js构造函数自动返回:js的构造函数不需要返回,自动返回

4、this用法:用了this关键字,因为用了new之后this指向对象

5、var 变量名接收一切:js中新创建出来的对象还是用 var 变量名 的方式接收,和变量的方式一样

6、js构造模式和其它一样:js的构造模式和java、c++等一样

代码二:

 <!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>课堂演示</title>
</head>
<body>
<script>
//构造函数模式
//注意:构造函数不需要使用 return语句返回对象,它的返回是自动完成的
function People(name,weapon){
this.name=name;
this.weapon=weapon;
this.run=function(){
return this.name+'的武器是'+this.weapon
}
}
var wujing=new People('沙悟净','禅杖');
var wukong=new People('孙悟空','金箍棒');
var bajian=new People('猪八戒','钉耙');
//alert(wujing.run())
//alert(wujing instanceof People)
var monster=new Object();
//People.call(monster,'妖怪','葫芦')
People.apply(monster,['妖怪','葫芦'])
// alert(monster.run())
// alert(monster.name)
var monster1=new People('小妖','长矛')
var monster2=new People('小妖','长矛')
alert(monster1.run()+'\n'+monster2.run())
alert(monster1.run==monster2.run)//两个对象实例的地址是不同的,说明两个对象会占用两个地址空间的内存 </script>
</body>
</html>

1、判断实例instanceof来判断实例,看这个of就知道实例在前,模型在后

2、call和apply用法:call方法和apply方法实现对象的模仿,用法是要 被模仿的东西.apply 的形式

3、构造模式内存浪费:构造器模式创建的对象分配的地址是不同的

javascript创建对象的方法--构造函数模式的更多相关文章

  1. javascript创建对象的方法--组合模式

    javascript创建对象的方法--组合模式 一.总结 0.作用:解决原型模式对象独有属性创建麻烦的问题 1.组合模式使用普遍:jquery就是用的组合模式,组合模式使用非常普遍 2.组合模式优点: ...

  2. javascript创建对象的方法--原型模式

    javascript创建对象的方法--原型模式 一.总结 1.原型模式解决内存浪费的方法(继承):通过继承,对象继承原型模式下的所有属性,对象不同于其它对象的的属性自己创建或者修改 2.原型的使用(p ...

  3. javascript创建对象的方法--工厂模式(非常好理解)

    javascript创建对象的方法--工厂模式(非常好理解) 一.简介 创建对象的方法 本质上都是把"属性"和"方法",封装成一个对象 创建对象的基本模式 普通 ...

  4. javascript创建对象之稳妥构造函数模式(七)

    所谓稳妥对象,指的是没有公共属性,而且其方法也不引用this的对象.稳妥对象最适合在一些安全的环境中(禁止使用this和new)或者在防止数据被其他应用程序改动时. 稳妥构造函数模式有2个特点:1.新 ...

  5. javascript创建对象之寄生构造函数模式(六)

    这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象; 但是从表面上看,这个函数有很像典型的构造函数. function createHuman(name,s ...

  6. javascript创建对象的方法--动态原型模式

    javascript创建对象的方法--动态原型模式 一.总结 1.作用:解决组合模式的属性和函数分离问题  2.思路:基本思路和组合模式相同:共用的函数和属性用原型方式,非共用的的函数和属性用构造函数 ...

  7. javascript创建对象的方法--基本模式

    javascript创建对象的方法--基本模式 一.总结 关注本质 二.代码 <!DOCTYPE html> <html lang="zh-cn"> < ...

  8. javascript 创建对象的7种模式

    使用字面量方式创建一个 student 对象: var student = function (){ name : "redjoy", age : 21, sex: women, ...

  9. javascript创建对象的方法总结

    Javascript创建对象 最简单的方法:创建object实例. var person=new Object(); person.name="Joey";person.age=2 ...

随机推荐

  1. python中一些有用的函数------持续更新中

    strip() 函数 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. str2 = " Runoob " # 去除首尾空格 print (str2.strip()) ...

  2. 參加北京bluemix云计算大会偶记

    我就不写散文了.博客也要轻量化. 记录心路历程吧. 这是一次ibm的技术大会.也是传道大会,洗脑大会.会议主题看起来非常多,占领了北京国际饭店的三层,作为一个老ibm bp感受非常多. 1.北京的创业 ...

  3. uva 473(dp)

    题意:按创作时间给出n首歌每首歌的时间ti,然后按创作时间装到m个光盘内,给出光盘最大分钟数t,问m个光盘最多总共放多少首歌. 题解:对于每首歌都能够选或者不选,假设选择了这首歌,是否把这首歌当做第j ...

  4. PHP开发环境&amp;MySQL下载安装及配置流程

    PHP开发环境&MySQL下载安装及配置流程 因工作须要,从0開始学PHP,前几天看完视频教程后開始搞开发环境,到今天才好.这里把安装配置流程梳理一下分享出来. 一.概述 要搭建一个开发环境无 ...

  5. Firefox中使用pac

    https://campus.barracuda.com/product/websecurityservice/article/WSS/ConfigProxyWithPACFile/ https:// ...

  6. 30.angularJS第一个实例

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 通过 ng-directives 扩展了 HTML. ng-app 指令定义一个 Angu ...

  7. 20. idea刷新项目、清除项目缓存

    转自:https://www.cnblogs.com/suiyisuixing/p/7723458.html 点击File -> Invalidate caches ,点击之后在弹出框中点击确认 ...

  8. Python正则表达式初识(一)

    首先跟大家简单唠叨两句为什么要学习正则表达式,为什么在网络爬虫的时候离不开正则表达式.正则表达式在处理字符串的时候扮演着非常重要的角色,在网络爬虫的时候也十分常用,大家可以把它学的简单一些,但是不能不 ...

  9. mysql 中sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月数据

    ·1.几个小时内的数据 DATE_SUB(NOW(), INTERVAL 5 HOUR) 1 ·2.今天 select * from 表名 where to_days(时间字段名) = to_days ...

  10. K-近邻算法学习

    # -- coding: utf-8 -- from numpy import * import operator def createDataSet(): group = array([[1.0,1 ...