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

1)基于已有对象扩充其属性和方法:

  1. var object = new Object();
  2. object.name = "zhangsan";
  3. object.sayName = function(name){
  4.   this.name = name;
  5.   alert(this.name);
  6. }
  7. object.sayName("lisi");

2)工厂方式:

  1. //工厂方式创建对象
  2. function createObject(){
  3.  
  4.   var object = new Object();
  5.  
  6.   object.username = "zhangsan";
  7.  
  8.   object.password = "123";
  9.  
  10.   object.get = function(){
  11.  
  12.     alert(this.username + ", " + this.password);
  13.  
  14.   }
  15.  
  16.   return object;
  17. }
  18.  
  19. var object1 = createObject();
  20.  
  21. var object2 = createObject();
  22.  
  23. object1.get();
  24.  
  25. //带参数的构造方法
  26.  
  27. function createObject(username,password){
  28.  
  29.   var object = new Object();
  30.  
  31.   object.username = username;
  32.  
  33.   object.password = password;
  34.  
  35.   object.get = function(){
  36.  
  37.     alert(this.username + ", " + this.password);
  38.  
  39.   }
  40.  
  41.   return object;
  42. }
  43.  
  44. var object1 = createObject("zhangsan","123");
  45.  
  46. object1.get();
  47.  
  48. //让一个函数被多个对象共享,而不是每一个对象拥有一个函数对象
  49.  
  50. function get(){
  51.  
  52.   alert(this.username + ", " + this.password);
  53.  
  54. }
  55.  
  56. function createObject(username,password){
  57.  
  58.   var object = new Object();
  59.  
  60.   object.username = username;
  61.  
  62.   object.password = password;
  63.  
  64.   object.get = get;
  65.  
  66.   return object;
  67. }
  68.  
  69. var object1 = createObject("zhangsan","123");
  70.  
  71. var object2 = createObject("lisi","456");
  72.  
  73. object1.get();
  74.  
  75. object2.get();

3)构造函数方式:

  1. function Person(){
  2.  
  3.   //在执行第一行代码前,js引擎会为我们生成一个对象
  4.  
  5.   object.username = "zhangsan";
  6.  
  7.   object.password = "123";
  8.  
  9.   object.getInfo = function(){
  10.  
  11.     alert(this.username + ", " + this.password);
  12.  
  13.   }
  14.  
  15.   //此处有一个隐藏的return语句,用于将之前生成的对象返回
  16.  
  17. }
  18.  
  19. var person = new Person();
  20.  
  21. person.getInfo();
  22.  
  23. //可以在构造对象时传递参数
  24.  
  25. function Person(username,password){
  26.  
  27.   //在执行第一行代码前,js引擎会为我们生成一个对象
  28.  
  29.   object.username = username;
  30.  
  31.   object.password = password;
  32.  
  33.   object.getInfo = function(){
  34.  
  35.     alert(this.username + ", " + this.password);
  36.  
  37.   }
  38.  
  39.   //此处有一个隐藏的return语句,用于将之前生成的对象返回
  40.  
  41. }
  42.  
  43. var person = new Person("zhangsan","123");
  44.  
  45. person.getInfo();

4)原型 ("prototype")方式:

  1. //使用原型 (prototype)方式创建对象
  2.  
  3. function Person(){
  4.  
  5. }
  6.  
  7. Person.prototype.username = "zhangsan";
  8.  
  9. Person.prototype.password= "123";
  10.  
  11. Person.prototype.getInfo = function(){
  12.  
  13.   alert(this.username + ", " + this.password);
  14. }
  15.  
  16. var person1 = new Person();
  17.  
  18. var person2 = new Person();
  19.  
  20. person1.username = "lisi";
  21.  
  22. person1.getInfo();
  23.  
  24. person2.getInfo();
  25.  
  26. //
  27. function Person(){
  28.  
  29. }
  30.  
  31. Person.prototype.username = new Array();
  32.  
  33. Person.prototype.password= "123";
  34.  
  35. Person.prototype.getInfo = function(){
  36.  
  37.   alert(this.username + ", " + this.password);
  38.  
  39. }
  40.  
  41. var person1 = new Person();
  42.  
  43. var person2 = new Person();
  44.  
  45. person1.username.push("zhangsan");
  46.  
  47. person1.username.push("lisi");
  48.  
  49. person1.password= "456";
  50.  
  51. person1.getInfo();
  52.  
  53. person2.getInfo();
  54.  
  55. //使用原型 + 构造函数方式来定义对象
  56.  
  57. function Person(){
  58.  
  59.   this.username = new Array();
  60.  
  61.   this.password= "123";
  62.  
  63. }
  64.  
  65. Person.prototype.getInfo = function(){
  66.  
  67.   alert(this.username + ", " + this.password);
  68.  
  69. }
  70.  
  71. var person1 = new Person();
  72.  
  73. var person2 = new Person();
  74.  
  75. person1.username.push("zhangsan");
  76.  
  77. person2.username.push("lisi");
  78.  
  79. person1.getInfo();
  80.  
  81. person2.getInfo();

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

  1. function Person(){ 
  2.  
  3.   this.username = new Array();
  4.  
  5.   this.password= "123";
  6.  
  7.   if(typeof Person.flag == "undefined"){
  8.  
  9.     alert("invoked");  
  10.  
  11.     Person.prototype.getInfo = function(){
  12.  
  13.       alert(this.username + ", " + this.password);
  14.  
  15.     }
  16.  
  17.     Person.flag = true;
  18.   }
  19.  
  20. }
  21.  
  22. var person1 = new Person();
  23.  
  24. var person2 = new Person();
  25.  
  26. person1.getInfo();
  27.  
  28. person2.getInfo();

JS笔记2 --定义对象的更多相关文章

  1. js笔记19 事件对象

    1.常用的事件 onmouseover  onmouseout  onmousedown  onmousemove  onmouseup   onclick  onchange  onfocus  o ...

  2. js 笔记 数组(对象)

    一.javascript push 的元素为指针 var data = {"test":{"201308":"23","20130 ...

  3. js定义对象的几种容易犯的错误

    //js定义对象的几种容易犯的错误function Person() { getName = function (){ console.info(1); }; return this;}//Perso ...

  4. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  5. JS 学习笔记--11---内置对象(Global/Math)

    练习中使用的浏览器是IE10,如果各位朋友有不同意见或者遇到浏览器不兼容问题,希望指正 1.内置对象的定义:有ECMAScript实现提供的.不依赖与宿主环境的对象,在ECMAScript运行之前就已 ...

  6. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  7. js中定义对象的几种方式

    转载:http://blog.sina.com.cn/s/blog_60f632050100wz7h.html (1)基于已有对象的扩充方法:适用于临时构建对象,弊端:每次构建对象都要新建一个. va ...

  8. JS中定义对象和集合

    在js中定义对象: 方式一: var obj = {}; obj['a']=1; obj['b']=2; 方式二: var obj=new Object(); obj.a=1; obj.b=2; 在j ...

  9. JS笔记(二):对象

    (一) 对象 对象是JS的基本数据类型,类似于python的字典.然而对象不仅仅是键值对的映射,除了可以保持自有的属性,JS对象还可以从一个称为原型的对象继承属性,对象的方法通常是继承的属性.(这种对 ...

随机推荐

  1. 数论(毕达哥拉斯定理):POJ 1305 Fermat vs. Pythagoras

    Fermat vs. Pythagoras Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 1493   Accepted: ...

  2. ZOJ1025-最长下降子序列

    ZOJ1025-Wooden Sticks 加工木棒问题 [问题描述] 现有n根木棒,已知它们的长度和重量.要用一部木工机一根一根地加工这些木棒.该机器在加工过程中需要一定的准备时间用于清洗机器.调整 ...

  3. jquery ajaxform上传文件返回不提示信息的问题

    在使用jquery的ajaxform插件进行ajax提交表单并且上传文件的时候,返回类型datatype :json但是后台通过写出一个json对象后,在执行完以后没有进入success函数,而是直接 ...

  4. Android源码学习

    http://android-wheel.googlecode.com/svn/trunk/android-wheel-read-only 在github上面有一个叫做 android-wheel 的 ...

  5. [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !

    n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...

  6. Leetcode - Reverse Words

    比起POJ弱爆了一题,从后往前扫描一遍,O(n)时间,仅仅要注意各种极端情况就可以,不明确通过率为什么仅仅有13%. #include<iostream> #include<stri ...

  7. 我的搜索优化记录(一):中文分词优化IK Analyzer

    搜索绝对不仅仅是搭起框架,跑出结果就完成的工作,之后分词.排序等等的优化才是重头戏. 先交代下背景:这个搜索是我一个人负责搭建并优化的项目,主要索引对象为歌曲.歌手MV等等. 使用技术:Lucene. ...

  8. Android GridView属性集合

    GridView的一些特殊属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动 2.android:columnWidth=”90dp &q ...

  9. mysql源码分析

    http://blog.csdn.net/u012935160/article/category/2697485

  10. Android(java)学习笔记238:多媒体之图片画画板案例

    1.首先我们编写布局文件activity_main.xml如下: <RelativeLayout xmlns:android="http://schemas.android.com/a ...