js深入研究之克隆,属性,数组,对象,函数
代码
- <script type="text/javascript">
- /* 克隆原型得到对象 */
- function clone(object) {
- function F() {}
- F.prototype = object;
- return new F;
- }
- var Person = {
- name: 'default name',
- getName: function() {
- return this.name;
- }
- };
- var reader = clone(Person);
- console.log(reader.getName()); // This will output 'default name'.
- reader.name = 'John Smith';
- console.log(reader.getName()); // This will now output 'John Smith'.
- /* Author Prototype Object. */
- var Author = clone(Person);
- Author.books = []; // 书数组
- Author.getBooks = function() {
- return this.books;
- }
- var author = [];
- author[0] = clone(Author);
- author[0].name = 'Dustin Diaz';
- author[0].books = ['JavaScript Design Patterns'];
- author[1] = clone(Author);
- author[1].name = 'Ross Harmes';
- author[1].books = ['JavaScript Design Patterns','PHP','Mysql'];
- console.log(author[0].getName());
- console.log(author[0].getBooks());
- console.log(author[1].getName());
- console.log(author[1].getBooks());
- </script>
结果
这里的console.log很有意思,比alert有意思,alert不能获取全部数据,需要一个个弹出。
js的数组定义也很有意思。
进一步升级
- <script type="text/javascript">
- /* 克隆原型得到对象 */
- function clone(object) {
- function F() {}
- F.prototype = object;
- return new F;
- }
- var Person = {
- name: 'default name',
- getName: function() {
- return this.name;
- }
- };
- var Author = clone(Person);
- Author.books = []; // 书数组
- Author.getBooks = function() {
- return this.books;
- }
- var authorClone = clone(Author);
- console.log(authorClone.name); // string 'default name'.
- authorClone.name = 'new name'; // 重新赋值
- console.log(authorClone.name); // Now linked to the primative authorClone.name, which
- // is the string 'new name'.
- console.log(Author.getName()); // 没有改变,任然是 'default name'
- console.log(Author.getBooks()); // 空的
- authorClone.books.push('new book'); // Author被改了
- authorClone.books.push('new new book'); // Author被改了
- console.log(Author.getBooks()); // array 'new book'
- console.log(authorClone.getBooks()); // array 'new book'
- authorClone.books = []; // 定义了属于自己的books数组
- authorClone.books.push('new book2'); // We are now modifying that new array.
- authorClone.books.push('new book3');
- authorClone.books.push('new book4');
- console.log(authorClone.getBooks());
- console.log(Author.getBooks());
- var CompoundObject = {
- string1: 'default value',
- childObject: {
- bool: true,
- num: 10
- },
- getChild: function() { // 返回对象Object
- return this.childObject;
- }
- }
- var compoundObjectClone = clone(CompoundObject);
- compoundObjectClone.childObject.num = 5; // 不好的方式
- compoundObjectClone.childObject = { // 好一点的方式
- bool: true,
- num: 5
- };
- console.log(compoundObjectClone.getChild());
- </script>
js深入研究之克隆,属性,数组,对象,函数的更多相关文章
- Js中常用的字符串,数组,函数扩展
由于最近辞职在家,自己的时间相对多一点.所以就根据prototytpeJS的API,结合自己正在看的司徒大神的<javascript框架设计>,整理了下Js中常用一些字符串,数组,函数扩展 ...
- JS分割字符串并放入数组的函数
JS分割字符串并放入数组的函数: var InterestKeywordListString = $("#userInterestKeywordLabel").html(); v ...
- js中的节点遍历+类数组对象
firstChild 第一个子元素 lastChild 最后一个子元素 childNodes[n] = childNodes.item(n) 第n+1个子元素 parentNode ...
- JS 字符串对象 数组对象 函数对象 函数作用域
一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...
- 数组 & 对象 & 函数
数组 数组也是一个对象,不同的是对象用字符串作为属性名,而数组用数字作为索引,数组的索引从0开始 创建数组: //方式一:构造器,可以在创建数组时指定 Var arr = new Array(1,2, ...
- JS笔记(三):数组、函数、类
(一) 数组 //创建数组 var the_array = [1,2,3,4,'5'] console.log(the_array[0]) //读取索引为0的数据 the_array[5] = '赋值 ...
- JavaScript 中有关数组对象的方法
JS 处理数组多种方法 js 中的数据类型分为两大类:原始类型和对象类型. 原始类型包括:数值.字符串.布尔值.null.undefined 对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象 ...
- python第四十八课——类函数和对象函数
5.类函数和对象函数 类函数:在定义函数的上面一行书写@classmethod,特点:没有self 有cls 对象函数:定义在class中的普通的def函数 演示类函数和对象函数的定义使用: 总结: ...
- js 按指定属性给对象数组排序(json数组)
有时,我们有一个json对象的数组集合,如何按指定对象属性来进行排序? //fieldArr为一个json对象数组 var fieldArr = fieldArr.sort(compare(" ...
随机推荐
- 用 O(1) 时间检测整数 n 是否是 2 的幂次。
位操作 2的幂次数 2 10 4 100 8 1000 16 10000 ... 1 class Solution { 2 /* 3 * @param n: An integer 4 * @retu ...
- css流式和弹性布局(未完)
(子容器%父容器)*100 png透明ie6中filter:progid:DXImageTransfornm.Microsoft.AlphaImageLoader( src='路径',sizingMe ...
- 漏洞都是怎么编号的CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD
在一些文章和报道中常常提到安全漏洞CVE-1999-1046这样的CVE开头的漏洞编号,这篇文章将常见的漏洞ID的表示方法做下介绍: 1.以CVE开头,如CVE-1999-1046这样的 CVE 的英 ...
- javascript eval和JSON之间的联系(转)
eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句.eval函数将把最后一个表达式 ...
- Android:Service的非绑定式的创建和生命周期
Android的Service若使用非绑定式的创建,则创建后将无法再与它取得联系.即无法传递消息參数等: 所以假设希望创建后仍然与其存在联系,那么能够參考我的前几篇博客<Android:Serv ...
- 设计模式2----建造者模式(builder pattern)
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类型:创建类模式 类图: UML图 四个要素 Builder: 抽象建造者ConcreteBuilder: 具体建造者 ...
- MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql
Mysql 默认是没有开启这个权限的(只允许使用 host:localhost,或者 host:127.0.0.1),如果想用 host:192.168.1.* ,来访问mysql ,需要手动开启这个 ...
- Mac下如何不借助第三方工具实现NTFS分区的可写挂载
问题背景 我想很多使用Mac的同学都会遇到读写NTFS磁盘的问题,因为默认情况下Mac OSX对NTFS磁盘的挂载方式是只读(read-only)的,因此把一个NTFS格式的磁盘插入到Mac上,是只能 ...
- ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据
本例旨在说明我的一种Controller接收ajax提交(POST)过来的json对象或数组信息的方式,感觉应该有更好的方式,欢迎提出宝贵意见. JSON.stringify(jsonObj)不支持I ...
- js判断值是否为数字
js判断是否是数字 第一种方法 isNaN isNaN 返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字). NaN 即 Not a Number isNaN(numValu ...