代码

  1. <script type="text/javascript">
  2. /* 克隆原型得到对象 */
  3. function clone(object) {
  4. function F() {}
  5. F.prototype = object;
  6. return new F;
  7. }
  8.  
  9. var Person = {
  10. name: 'default name',
  11. getName: function() {
  12. return this.name;
  13. }
  14. };
  15.  
  16. var reader = clone(Person);
  17. console.log(reader.getName()); // This will output 'default name'.
  18. reader.name = 'John Smith';
  19. console.log(reader.getName()); // This will now output 'John Smith'.
  20.  
  21. /* Author Prototype Object. */
  22.  
  23. var Author = clone(Person);
  24. Author.books = []; // 书数组
  25. Author.getBooks = function() {
  26. return this.books;
  27. }
  28.  
  29. var author = [];
  30.  
  31. author[0] = clone(Author);
  32. author[0].name = 'Dustin Diaz';
  33. author[0].books = ['JavaScript Design Patterns'];
  34.  
  35. author[1] = clone(Author);
  36. author[1].name = 'Ross Harmes';
  37. author[1].books = ['JavaScript Design Patterns','PHP','Mysql'];
  38. console.log(author[0].getName());
  39. console.log(author[0].getBooks());
  40. console.log(author[1].getName());
  41. console.log(author[1].getBooks());
  42. </script>

结果

这里的console.log很有意思,比alert有意思,alert不能获取全部数据,需要一个个弹出。

js的数组定义也很有意思。

进一步升级

  1. <script type="text/javascript">
  2. /* 克隆原型得到对象 */
  3. function clone(object) {
  4. function F() {}
  5. F.prototype = object;
  6. return new F;
  7. }
  8.  
  9. var Person = {
  10. name: 'default name',
  11. getName: function() {
  12. return this.name;
  13. }
  14. };
  15.  
  16. var Author = clone(Person);
  17. Author.books = []; // 书数组
  18. Author.getBooks = function() {
  19. return this.books;
  20. }
  21.  
  22. var authorClone = clone(Author);
  23. console.log(authorClone.name); // string 'default name'.
  24. authorClone.name = 'new name'; // 重新赋值
  25. console.log(authorClone.name); // Now linked to the primative authorClone.name, which
  26. // is the string 'new name'.
  27. console.log(Author.getName()); // 没有改变,任然是 'default name'
  28. console.log(Author.getBooks()); // 空的
  29. authorClone.books.push('new book'); // Author被改了
  30. authorClone.books.push('new new book'); // Author被改了
  31. console.log(Author.getBooks()); // array 'new book'
  32. console.log(authorClone.getBooks()); // array 'new book'
  33. authorClone.books = []; // 定义了属于自己的books数组
  34. authorClone.books.push('new book2'); // We are now modifying that new array.
  35. authorClone.books.push('new book3');
  36. authorClone.books.push('new book4');
  37. console.log(authorClone.getBooks());
  38. console.log(Author.getBooks());
  39.  
  40. var CompoundObject = {
  41. string1: 'default value',
  42. childObject: {
  43. bool: true,
  44. num: 10
  45. },
  46. getChild: function() { // 返回对象Object
  47. return this.childObject;
  48. }
  49. }
  50.  
  51. var compoundObjectClone = clone(CompoundObject);
  52.  
  53. compoundObjectClone.childObject.num = 5; // 不好的方式
  54.  
  55. compoundObjectClone.childObject = { // 好一点的方式
  56. bool: true,
  57. num: 5
  58. };
  59. console.log(compoundObjectClone.getChild());
  60.  
  61. </script>

js深入研究之克隆,属性,数组,对象,函数的更多相关文章

  1. Js中常用的字符串,数组,函数扩展

    由于最近辞职在家,自己的时间相对多一点.所以就根据prototytpeJS的API,结合自己正在看的司徒大神的<javascript框架设计>,整理了下Js中常用一些字符串,数组,函数扩展 ...

  2. JS分割字符串并放入数组的函数

    JS分割字符串并放入数组的函数: var InterestKeywordListString = $("#userInterestKeywordLabel").html();  v ...

  3. js中的节点遍历+类数组对象

    firstChild  第一个子元素 lastChild  最后一个子元素 childNodes[n]  =   childNodes.item(n)    第n+1个子元素 parentNode  ...

  4. JS 字符串对象 数组对象 函数对象 函数作用域

    一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...

  5. 数组 & 对象 & 函数

    数组 数组也是一个对象,不同的是对象用字符串作为属性名,而数组用数字作为索引,数组的索引从0开始 创建数组: //方式一:构造器,可以在创建数组时指定 Var arr = new Array(1,2, ...

  6. JS笔记(三):数组、函数、类

    (一) 数组 //创建数组 var the_array = [1,2,3,4,'5'] console.log(the_array[0]) //读取索引为0的数据 the_array[5] = '赋值 ...

  7. JavaScript 中有关数组对象的方法

    JS 处理数组多种方法 js 中的数据类型分为两大类:原始类型和对象类型. 原始类型包括:数值.字符串.布尔值.null.undefined 对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象 ...

  8. python第四十八课——类函数和对象函数

    5.类函数和对象函数 类函数:在定义函数的上面一行书写@classmethod,特点:没有self 有cls 对象函数:定义在class中的普通的def函数 演示类函数和对象函数的定义使用: 总结: ...

  9. js 按指定属性给对象数组排序(json数组)

    有时,我们有一个json对象的数组集合,如何按指定对象属性来进行排序? //fieldArr为一个json对象数组 var fieldArr = fieldArr.sort(compare(" ...

随机推荐

  1. 用 O(1) 时间检测整数 n 是否是 2 的幂次。

    位操作 2的幂次数 2  10 4 100 8 1000 16 10000 ... 1 class Solution { 2 /* 3 * @param n: An integer 4 * @retu ...

  2. css流式和弹性布局(未完)

    (子容器%父容器)*100 png透明ie6中filter:progid:DXImageTransfornm.Microsoft.AlphaImageLoader( src='路径',sizingMe ...

  3. 漏洞都是怎么编号的CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD

    在一些文章和报道中常常提到安全漏洞CVE-1999-1046这样的CVE开头的漏洞编号,这篇文章将常见的漏洞ID的表示方法做下介绍: 1.以CVE开头,如CVE-1999-1046这样的 CVE 的英 ...

  4. javascript eval和JSON之间的联系(转)

    eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句.eval函数将把最后一个表达式 ...

  5. Android:Service的非绑定式的创建和生命周期

    Android的Service若使用非绑定式的创建,则创建后将无法再与它取得联系.即无法传递消息參数等: 所以假设希望创建后仍然与其存在联系,那么能够參考我的前几篇博客<Android:Serv ...

  6. 设计模式2----建造者模式(builder pattern)

    定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类型:创建类模式 类图: UML图 四个要素 Builder: 抽象建造者ConcreteBuilder: 具体建造者 ...

  7. MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql

    Mysql 默认是没有开启这个权限的(只允许使用 host:localhost,或者 host:127.0.0.1),如果想用 host:192.168.1.* ,来访问mysql ,需要手动开启这个 ...

  8. Mac下如何不借助第三方工具实现NTFS分区的可写挂载

    问题背景 我想很多使用Mac的同学都会遇到读写NTFS磁盘的问题,因为默认情况下Mac OSX对NTFS磁盘的挂载方式是只读(read-only)的,因此把一个NTFS格式的磁盘插入到Mac上,是只能 ...

  9. ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据

    本例旨在说明我的一种Controller接收ajax提交(POST)过来的json对象或数组信息的方式,感觉应该有更好的方式,欢迎提出宝贵意见. JSON.stringify(jsonObj)不支持I ...

  10. js判断值是否为数字

    js判断是否是数字 第一种方法 isNaN isNaN 返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字). NaN 即 Not a Number isNaN(numValu ...