`

文章来源:http://www.itnose.net/detail/6034228.html 更多文章:http://www.itnose.net/type/7

阅读更多

文章来源:http://www.itnose.net/detail/6034228.html 更多文章:http://www.itnose.net/type/71.html

/**
 *在js中并不存在类,所以可以直接通过Object来创建对象,但是使用这种方式创建有一
 *弊端:由于没有类的约束,无法实现对象的重复利用,并且没有一种规范约定,在操作时容易带来问题。
 */
var person = new Object();
person.name = "octopus";
person.age = 25;
person.say = function(){
  alert(this.name+","+this.age);
}

json:json就是js的对象,但是它省去了XML标签,而是通过{}来完成对象的说明。
var person = {
  name:"张三",
  age:25,
  say:function(){
    alert(this.name+","+this.age);
  }
}

//通过json依然可以创建对象数组,创建方式和js的数组一样。
var ps = [
  {name:"张三",age:25},
  {name:"李四",age:26}
];
for(var i=0;i<ps.length;i++){
  alert(ps[i].name);
}
/**
 * 创建一组用户,用户的属性有:
 * name:String,age:int,friends:Array
 * List<Person> ps = new ArrayList<Person>();
 * ps.add(new Person("张三",25,["Ada","Alice"]));
 * ps.add(new Person("李四",26,["Ada","Chris"]));
 * 把ps转换为json
 */
ps = [
  {
    name:"张三",
    age:25,
    friends:["Ada","Alice"]
  },
  {
    name:"李四",
    age:26,
    friends:["Ada","Chris"]
  }
];

//通过工厂的方式来创建对象
function createPerson(name,age){
  var o = new Object();
  o.name = this.name;
  o.age = this.age;
  o.say = function(){
    alert(this.name+":"+this.age);
  }
  return o;
}
//使用工厂的方式,虽然有效地解决了类的问题,但是也存在另一个问题:
//我们无法检测对象p1和p2的具体数据类型,用typeof p1/p2 得到的只能是Object。
var p1 = createPerson("Ada",21);  
var p2 = createPerson("Leon",23); 
p1.say();   //Ada:21
p2.say();   //Leon:23

/**
 * 通过构造函数的方式创建,和基于工厂的创建方式类似,
 * 最大的区别就是函数的名称就是类的名称,按照Java约定,第一个字母大写,
 * 使用构造函数创建时,在函数内部是通过this关键字来完成属性的定义。
 */
function Person(name,age){
  this.name = name;
  this.age = age;
  //这种方式带来的问题是所有的Person对象都会为该行为分配空间
  this.say = function(){
    alert(this.name+","+this.age);
  }

//通过Person来创建对象
var p = new Person("octopus",24);
p.say();  //octopus,24
/**
 * 使用构造函数的方式可以通过一下方式来检测对象的类型
 */
alert(p1 instanceof Person);  //true
alert(p1.say==p2.say);    //false
/**但是上述构造函数也会带来一些问题:
 * 1.每一个对象中都会存在一个方法的拷贝,如果对象的行为很对的话,空间的占有率就会大大增加
 * 解决方法:可以将函数放到全局变量中定义,这样可以让类中的行为指向同一个函数。
 */
function Person(name,age){
  this.name = name;
  this.age = age;
  //这种方式带来的问题是所有的Person对象都会为该行为分配空间
  this.say = say;
}

//将行为设置为全局的
function(){
  alert(this.name+","+this.age);
}
alert(p1.say==p2.say);  //true
//但是如果将行为设置为全局函数的时候,这个函数就可以被window调用,此时就破坏了对象的封装性。
//而且如果很多类用全局的方式定义了大量的方法,容易造成混乱,也将不利于开发。

下节我们学习用原型的方式创建对象。

 

分享到:
评论

相关推荐

    VUE--组件示例 博客 https://gudianxiaoshuo.blog.csdn.net/article/detail

    在Vue.js框架中,组件是构建可复用代码的基本单元,是 Vue 应用的核心组成部分。Vue组件可以被视为自定义HTML元素,它们有...通过实践这些示例,你可以更深入地理解Vue组件的工作原理,并能灵活地应用到实际项目中。

    谷歌浏览器平滑滚动扩展smoothscroll.zip

    扩展安装页面https://chrome.google.com/extensions/detail/nbokbjkabcmbfdlbddjidfmibcpneigj 特性 - Picasa-like smooth scrolling- Mouse wheel, middle mouse and keyboard support- Arrow keys, PgUp/PgDown...

    pdf内容对比,效果和部分程序见:https://chuanchuan.blog.csdn.net/article/detail

    标题中的“pdf内容对比”指的是一个使用Python编程语言开发的项目,目的是为了检测PDF文档之间的相似性,防止抄袭。在教育领域,这可能被用来检查学生的作业原创性。这个项目采取了将PDF转换为图片,然后提取图片中...

    android sdk 全版本集成 http://huakai.org

    谷歌经常被墙,有的同学也不知道如何下载平台环境...http://download.csdn.net/detail/holle_word/7571419 http://download.csdn.net/detail/holle_word/7164787 http://download.csdn.net/detail/holle_word/5916313 ...

    service.zip

    这里上传上网络调试调试工具:http://download.csdn.net/detail/chengdong1314/9723958 UDP数据传输的源代码:http://download.csdn.net/detail/chengdong1314/9726724 TCP CLIENT数据传输的源代码:...

    Java典型应用彻查1000例第一卷第二卷第三卷第三卷第四卷第五卷第六卷合集7/7

    第一个压缩包:http://download.csdn.net/detail/u010768563/5453463 第二个压缩包:http://download.csdn.net/detail/u010768563/5452557 第三个压缩包:http://download.csdn.net/detail/u010768563/5453649 第四...

    安卓android获取手机

    综上所述,获取安卓手机联系人和通讯录列表是一个涉及ContentResolver、ContactsContract以及权限管理等多个方面的复杂过程,开发者需要理解这些核心概念并遵循最佳实践,确保功能的正确性和安全性。

    WPF经典教程之WPF命令

    (更多资源:http://cleopard.download.csdn.net/) (福利:http://xuemeilaile.com/) WPF经典教程之WPF体系结构 http://download.csdn.net/detail/cleopard/7999393 WPF经典教程之WPF应用程序管理 ...

    网络安全练习网站大全.rar

    https://blog.csdn.net/ida0918/article/detail https://www.zhihu.com/question sql注入https://redtige web:http://hackin 综合:http://www.wechal 综合性黑客game:http://www. 综合性新平台CTF:...

    Android游戏源码—3D迷宫

    Android游戏源码-3D迷宫 @更多@ http://cleopard.download.csdn.net/ 福利: http://xuemeilaile.com 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] ...

    oracle10G 10.2.0.5.19 补丁集 p20299014 linux hp-ux aix

    http://download.csdn.net/detail/iaihah/9545156 http://download.csdn.net/detail/iaihah/9545166 http://download.csdn.net/detail/iaihah/9545171 http://download.csdn.net/detail/iaihah/9545173 hu-ux IA64 ...

    《ASP.NET项目开发案例全程实录(第2版)》所有案例源码.rar

    http://download.csdn.net/detail/guanlianan/3588911 《ASP.NET项目开发案例全程实录(第2版)》随书光盘.part02.rar http://download.csdn.net/detail/guanlianan/3589044 《ASP.NET项目开发案例全程实录(第2版)...

    CoreTemp 1.0 rc4 32位绿色版

    64位http://download.csdn.net/detail/puma1349/4752667 推荐1: http://download.csdn.net/detail/puma1349/4639190 2: http://download.csdn.net/detail/puma1349/4628225 ...

    C++贪吃蛇游戏源码

    @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#...

    C++拼图游戏源码

    C++拼图游戏源码 @或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ ...http://xuemeilaile.com ...http://download.csdn.net/detail/cleopard/8340303

    C++扫雷游戏源码

    @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#...

    [17个软件测试文档]-3“苍蝇式的战斗精神”和“XX性能测试”

    http://download.csdn.net/detail/cleopard/8344037 [17个软件测试文档]-10成功的 Web 应用系统性能测试 http://download.csdn.net/detail/cleopard/8344033 [17个软件测试文档]-9web项目测试实战性能测试结果分析样...

    最新Color Admin1.9 - bootstrap3响应后台模板+前端网页模板

    Table Data: http://datatables.net/blog/Twitter_Bootstrap_2 Ion Range Slider: http://ionden.com/a/plugins/ion.rangeSlider/en.html jQuery Tag It: http://aehlke.github.io/tag-it/ jQuery Countdown: ...

    C#仿QQ空间个人站点(.NET+SQL)_WebZone

    开发工具:VS2005+SQL2000 页面布局:CSS+DIV 模块: 个人简介(Flash+XML) 个人日志 Flash 相册 个人档 ...修改数据库链接文件Web.config里面的信息为你的链接...http://download.csdn.net/detail/cleopard/8340303

    RedHat Enterprise Linux 5下安装JDK 详细出处参考:http://www.itqun.net/content-detail/21404

    在Red Hat Enterprise Linux 5(RHEL 5)操作系统中安装Java Development Kit(JDK)是许多开发人员和系统管理员必须进行的一项基本任务。JDK是Java编程语言的核心组件,包含了编译、调试和运行Java应用程序所需的...

Global site tag (gtag.js) - Google Analytics