javascript 构造函数方式定义对象


Posted in Javascript onJanuary 02, 2015

javascript是动态语言,可以在运行时给对象添加属性,也可以给对象删除(delete)属性

<html> 

<head>

<script type="text/javascript">

/*

//01.定义对象第一种方式

var object =new Object();

alert(object.username);

//01.1增加属性username

object["username"]="liujianglong";

//object.username="liujl";

alert(object.username);

//01.2删除属性username

delete object.username;//username属性已经从object对象中删除

alert(object.username);

*/

//02.定义对象第二种方式--在javascript中定义对象的一种最常见的方式

var object={name:"zhangsan",age:10,sex:"fale"};

alert(object.name);

alert(object.age);

alert(object.sex);

</script>

</head>         

<body>

</body>

</html>

属性名:方法名  也是可以的.因为函数本身就是个对象

javascript 数组排序

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

var array=[1,3,25];

/////////////////////////////////

var compare=function(num1,num2){

    var temp1=parseInt(num1);

    var temp2=parseInt(num2);

    if(temp1<temp2){

        return -1;

    }else if(temp1==temp2){

        return 0;

    }else{

        return 1;

    }

}

//array.sort(compare);//01.函数名是对象引用

////////////////////////////////
//02.匿名函数方式//////////////////

array.sort(function c(num1,num2){

var temp1=parseInt(num1);

    var temp2=parseInt(num2);

    if(temp1<temp2){

        return -1;

    }else if(temp1==temp2){

        return 0;

    }else{

        return 1;

    }

});

/////////////////////////////////

alert(array);

</script>

</head>         

<body>

</body>

</html>

javascript中定义对象的几种方式(javascript中没有类的概念,只有对象 )

第一种方式: 基于已有对象扩充其属性和方法

<script type="text/javascript">

//01.基于已有对象扩充其属性和方法

var object=new Object();

object.username="zhangsan";

object.sayName=function (name){

    this.username=name;

    alert(this.username);

}

alert(object.username);

object.sayName("lisi");

alert(object.username);

</script>

这种方法具有局限性,因为javascript不像java那样具有类的概念,写一个类,之后new就可以得到一个具有了这些属性、方法的对象了。

这时如果要拥有object2就只能把上面来的代码再写一份,这是不太好的。

第二种方式: 工厂方式

           类似于java中静态的工厂方法。

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

//对象工厂方法

var  createObject=function(){

    var object=new Object();

    object.username="zhangsan";

    object.password="123";

    object.get=function(){

        alert(this.username+" , "+object.password); 

    }

    return object;

}

var obj1=createObject();

var obj2=createObject();

obj1.get();

//修改对象2的密码

obj2["password"]="123456";

obj2.get();

</script>

</head>         

<body>

</body>

</html>

上面这种方式创建对象有弊端(每个对象都有一个get方法,从而浪费了内存),改进后的工厂方式( 所有对象共享一个get方法):

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

//所有对象共享的get方法

var get=function(){

    alert(this.username+" , "+this.password);

}

//对象工厂方法

var createObject=function(username,password){

    var object=new Object();

    object.username=username;

    object.password=password;

    object.get=get;//注意:这里不写方法的括号

    return object;

}

//通过工厂方法创建对象

var object1=createObject("zhangsan","123");

var object2=createObject("lisi","345");

//调用get方法

object1.get();

object2.get();

</script>

</head>         

<body>

</body>

</html>

第三种方式: 构造函数方式 定义对象

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

var get=function(){

    alert(this.username+" , "+this.password);

}

function Person(username,password){

    //在执行第一行代码前,js引擎会为我们生成一个对象

    this.username=username;

    this.password=password;

    this.get=get;

    //在此处,有一个隐藏的return语句,用于返回之前生成的对象[这点是和工厂模式不一样的地方]

}

var person=new Person("zhangsan","123");

person.get();

</script>

</head>         

<body>

</body>

</html>

第四种方式: 原型(Prototype)方式创建对象

prototype是object对象中的属性,所有person对象也可以拥有prototype这个属性。

可以给对象的原型增加一些属性,方法。

单纯的使用原型方式创建对象的缺点:①无法传参数,只能在对象创建后再改变它的值

                                                      ②可能会导致程序错误

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

function Person(){

}

Person.prototype.username="zhangsan";

Person.prototype.password="123";

Person.prototype.getInfo=function(){

    alert(this.username+" , "+this.password);

}

var person1=new Person();

var person2=new Person();

person1.username="lisi";

person1.getInfo();

person2.getInfo();

</script>

</head>         

<body>

</body>

</html>
<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

function Person(){

}

Person.prototype.username=new Array();

Person.prototype.password="123";

Person.prototype.getInfo=function(){

    alert(this.username+" , "+this.password);

}

var person1=new Person();

var person2=new Person();

person1.username.push("wanglaowu");

person1.username.push("wanglaowu2");

person2.password="456";

person1.getInfo    ();

person2.getInfo();

</script>

</head>         

<body>

</body>

</html>

单纯使用原型方式定义对象无法再构造函数中为属性赋初值,只能在对象生成后再去改变属性值。

第五种方式: 使用原型+构造函数方式来定义对象----推荐使用

对象之间的属性互不干扰
各个对象之间共享同一个方法

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

//使用原型+构造函数方式来定义对象

function Person(){

    //属性 定义在构造函数中

    this.username=new Array();

    this.password="123";

}

    //方法 定义在原型中

Person.prototype.getInfo=function(){

    alert(this.username+" , "+this.password);

}

var p1=new Person();

var p2=new Person();

p1.username.push("zhangsan");

p2.username.push("lisi");

p1.getInfo();

p2.getInfo();

</script>

</head>         

<body>

</body>

</html>

第六种方式: 动态原型方式----推荐使用

         在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。

<!DOCTYPE html>

<html> 

<head>

<script type="text/javascript">

var Person=function (username,password){

    this.username=username;

    this.password=password;

    if(typeof Person.flag=="undefined"){

        alert("invoked");

        Person.prototype.getInfo=function(){

            alert(this.username+" , "+this.password);

        }

        Person.flag=true;    

    }

}

var p1=new Person("zhangsan","123");

var p2=new Person("lisi","456");

p1.getInfo();

p2.getInfo();

</script>

</head>         

<body>

</body>

</html>
Javascript 相关文章推荐
JavaScript CSS修改学习第五章 给“上传”添加样式
Feb 19 Javascript
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
谈谈关于JavaScript 中的 MVC 模式
Apr 11 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
Apr 07 Javascript
jQuery实现的表格前端排序功能示例
Sep 18 jQuery
详解Webpack实战之构建 Electron 应用
Dec 25 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
JavaScript 语句之常用 for 循环详解
Mar 29 Javascript
深入探寻javascript定时器
Jan 02 #Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 #Javascript
JavaScript中的null和undefined区别介绍
Jan 01 #Javascript
JavaScript中的全局对象介绍
Jan 01 #Javascript
原生javascript获取元素样式
Dec 31 #Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 #Javascript
jQuery中:last-child选择器用法实例
Dec 31 #Javascript
You might like
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
PHP内置加密函数详解
2016/11/20 PHP
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
为什么python比较流行
2020/06/19 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
员工评语大全
2014/01/19 职场文书
八一建军节感言
2014/02/28 职场文书
学校运动会霸气口号
2014/06/07 职场文书
大学专科自荐信
2014/06/17 职场文书