构造函数、原型链:

  1. function Person(name, age, job) {
  2. this.name = name;
  3. this.age = age;
  4. this.job = job;
  5. // this.sayName = function () {
  6. // console.log(this.name);
  7. // };
  8. Person.prototype.sayName = function () {
  9. console.log(this.name);
  10. }
  11. }
  12.  
  13. var p1 = new Person('Jesse', 18, 'coder');
  14. var p2 = new Person('Carol', 17, 'designer');
  15. console.log(p1.sayName==p2.sayName); //this.sayName = function () {} // false
  16. // console.log(p1.sayName==p2.sayName); //Person.prototype.sayName = function () {} // true
  17. console.log(p1.sayName()); //console.log(name); // Carol
  18. // console.log(p1.sayName()); //console.log(this.name); // Jesse

数组方法:

  1. //push() 添加一个或多个元素到数组的末尾 返回数组新的长度(length ) 改变原数组
  2. var sports = ["soccer", "baseball"];
  3. var total = sports.push("football", "swimming");
  4. console.log(sports); // ["soccer", "baseball", "football", "swimming"]
  5. console.log(total); // 4
  6.  
  7. //pop() 删除一个数组中的最后的一个元素 返回这个元素 改变原数组
  8. var myFish = ["angel", "clown", "mandarin", "surgeon"];
  9. console.log("myFish before: " + myFish);
  10. var popped = myFish.pop();
  11. console.log("myFish after: " + myFish);
  12. console.log("Removed this element: " + popped);
  1. //unshift() 在数组的开头添加一个或者多个元素 返回数组新的 length 值 改变原数组
  2. var arr = [1, 2];
  3. arr.unshift(0); //result of call is 3, the new array length
  4. //arr is [0, 1, 2]
  5. arr.unshift(-2, -1); // = 5
  6. //arr is [-2, -1, 0, 1, 2]
  7. arr.unshift( [-3] );
  8. //arr is [[-3], -2, -1, 0, 1, 2]
  9.  
  10. //shift() 删除数组的 第一个 元素 返回这个元素 改变原数组
  11. var myFish = ['angel', 'clown', 'mandarin', 'surgeon'];
  12. console.log('调用 shift 之前: ' + myFish);
  13. // "调用 shift 之前: angel,clown,mandarin,surgeon"
  14. var shifted = myFish.shift();
  15. console.log('调用 shift 之后: ' + myFish);
  16. // "调用 shift 之后: clown,mandarin,surgeon"
  17. console.log('被删除的元素: ' + shifted);
  18. // "被删除的元素: angel"
  1. //slice() 浅复制(shallow copy)数组的一部分到一个新的数组 返回这个新数组 不改变原数组
  2.  
  3. //如果该元素是个对象引用 (不是实际的对象),slice会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变。
  4.  
  5. //对于字符串、数字及布尔值来说 会拷贝这些值到新的数组里。在别的数组里修改这些字符串或数字或是布尔值,将不会影响另一个数组。
  6.  
  7. //如果向两个数组任一中添加了新元素,则另一个不会受到影响。
  8. //在下例中, slice从myCar中创建了一个新数组newCar.两个数组都包含了一个myHonda对象的引用. 当myHonda的color属性改变为purple, 则两个数组中的对应元素都会随之改变.
  9.  
  10. // 使用slice方法从myCar中创建一个newCar.
  11. var myHonda = { color: "red", wheels: 4, engine: { cylinders: 4, size: 2.2 } };
  12. var myCar = [myHonda, 2, "cherry condition", "purchased 1997"];
  13. var newCar = myCar.slice(0, 2);
  14.  
  15. // 输出myCar, newCar,以及各自的myHonda对象引用的color属性.
  16. print("myCar = " + myCar.toSource());
  17. print("newCar = " + newCar.toSource());
  18. print("myCar[0].color = " + myCar[0].color);
  19. print("newCar[0].color = " + newCar[0].color);
  20.  
  21. // 改变myHonda对象的color属性.
  22. myHonda.color = "purple";
  23. print("The new color of my Honda is " + myHonda.color);
  24.  
  25. //输出myCar, newCar中各自的myHonda对象引用的color属性.
  26. print("myCar[0].color = " + myCar[0].color);
  27. print("newCar[0].color = " + newCar[0].color);
  1. //splice() 用新元素替换旧元素,以此修改数组的内容 返回被删除的元素 改变原数组
  2. var myFish = ["angel", "clown", "mandarin", "surgeon"];
  3.  
  4. //从第 2 位开始删除 0 个元素,插入 "drum"
  5. var removed = myFish.splice(2, 0, "drum");
  6. //运算后的 myFish:["angel", "clown", "drum", "mandarin", "surgeon"]
  7. //被删除元素数组:[],没有元素被删除
  8.  
  9. //从第 3 位开始删除 1 个元素
  10. removed = myFish.splice(3, 1);
  11. //运算后的myFish:["angel", "clown", "drum", "surgeon"]
  12. //被删除元素数组:["mandarin"]
  13.  
  14. //从第 2 位开始删除 1 个元素,然后插入 "trumpet"
  15. removed = myFish.splice(2, 1, "trumpet");
  16. //运算后的myFish: ["angel", "clown", "trumpet", "surgeon"]
  17. //被删除元素数组:["drum"]
  18.  
  19. //从第 0 位开始删除 2 个元素,然后插入 "parrot", "anemone" 和 "blue"
  20. removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
  21. //运算后的myFish:["parrot", "anemone", "blue", "trumpet", "surgeon"]
  22. //被删除元素的数组:["angel", "clown"]
  23.  
  24. //从第 3 位开始删除 2 个元素
  25. removed = myFish.splice(3, Number.MAX_VALUE);
  26. //运算后的myFish: ["parrot", "anemone", "blue"]
  27. //被删除元素的数组:["trumpet", "surgeon"]
  1. //concat() 将传入的数组或非数组值与原数组合并,组成一个新的数组并返回. 不修改原数组
  2.  
  3. var alpha = ["a", "b", "c"];
  4. var numeric = [1, 2, 3];
  5. // 组成新数组 ["a", "b", "c", 1, 2, 3]; 原数组 alpha 和 numeric 未被修改
  6. var alphaNumeric = alpha.concat(numeric);
  7.  
  8. var num1 = [1, 2, 3];
  9. var num2 = [4, 5, 6];
  10. var num3 = [7, 8, 9];
  11. // 组成新数组[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原数组 num1, num2, num3 未被修改
  12. var nums = num1.concat(num2, num3);
  13.  
  14. var alpha = ['a', 'b', 'c'];
  15. // 组成新数组 ["a", "b", "c", 1, 2, 3], 原alpha数组未被修改
  16. var alphaNumeric = alpha.concat(1, [2, 3]);
  1. // join() 将数组中的所有元素连接成一个字符串 不修改原数组
  2. var a = ['Wind', 'Rain', 'Fire'];
  3. var myVar1 = a.join(); // myVar1的值变为"Wind,Rain,Fire"
  4. var myVar2 = a.join(', '); // myVar2的值变为"Wind, Rain, Fire"
  5. var myVar3 = a.join(' + '); // myVar3的值变为"Wind + Rain + Fire"
  6. var myVar4 = a.join(''); // myVar4的值变为"WindRainFire"
  1. //filter() 使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组
  2.  
  3. function isBigEnough(element) {
  4. return element >= 10;
  5. }
  6. var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
  7. // filtered is [12, 130, 44]
  1. //indexOf() 返回给定元素能找在数组中找到的第一个索引值,否则返回-1
  2. var array = [2, 5, 9];
  3. array.indexOf(2); // 0
  4. array.indexOf(7); // -1
  5. array.indexOf(9, 2); // 2
  6. array.indexOf(2, -1); // -1
  7. array.indexOf(2, -3); // 0
  8.  
  9. var indices = [];
  10. var array = ['a', 'b', 'a', 'c', 'a', 'd'];
  11. var element = 'a';
  12. var idx = array.indexOf(element);
  13. while (idx != -1) {
  14. indices.push(idx);
  15. idx = array.indexOf(element, idx + 1);
  16. }
  17. console.log(indices);
  18. // [0, 2, 4]
  19.  
  20. function updateVegetablesCollection (veggies, veggie) {
  21. if (veggies.indexOf(veggie) === -1) {
  22. veggies.push(veggie);
  23. console.log('New veggies collection is : ' + veggies);
  24. } else if (veggies.indexOf(veggie) > -1) {
  25. console.log(veggie + ' already exists in the veggies collection.');
  26. }
  27. }
  28.  
  29. var veggies = ['potato', 'tomato', 'chillies', 'green-pepper'];
  30.  
  31. // New veggies collection is : potato,tomato,chillies,green-papper,spinach
  32. updateVegetablesCollection(veggies, 'spinach');
  33. // spinach already exists in the veggies collection.
  34. updateVegetablesCollection(veggies, 'spinach');
  1. //reverse() 颠倒数组中元素的位置。第一个元素会成为最后一个,最后一个会成为第一个 改变原数组
  2.  
  3. var myArray = ['one', 'two', 'three'];
  4. myArray.reverse();
  5. console.log(myArray) // ['three', 'two', 'one']

JavaScript 构造函数与原型链的更多相关文章

  1. 对Javascript 类、原型链、继承的理解

    一.序言   和其他面向对象的语言(如Java)不同,Javascript语言对类的实现和继承的实现没有标准的定义,而是将这些交给了程序员,让程序员更加灵活地(当然刚开始也更加头疼)去定义类,实现继承 ...

  2. Javascript 组合继承 原型链继承 寄生继承

    Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["re ...

  3. 图解JavaScript中的原型链

    转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof o ...

  4. Javascript 构造函数、原型对象、实例之间的关系

    # Javascript 构造函数.原型对象.实例之间的关系 # 创建对象的方式 # 1.new object() 缺点:创建多个对象困难 var hero = new Object(); // 空对 ...

  5. javaScript里的原型链

    原型对象也是普通的对象,是对象一个自带隐式的__proto__属性,原型也有可能有自己的原型,如果一个原型对象的原型不为null的话,我们就称之为原型链.原型链是由一些用来继承和共享属性的对象组成的( ...

  6. JavaScript继承与原型链

    对于那些熟悉基于类的面向对象语言(Java 或者 C++)的开发者来说,JavaScript 的语法是比较怪异的,这是由于 JavaScript 是一门动态语言,而且它没有类的概念( ES6 新增了c ...

  7. 一张图搞懂 Javascript 中的原型链、prototype、__proto__的关系 转载加自己的总结

    1. JavaScript内置对象 所谓的内置对象 指的是:JavaScript本身就自己有的对象 可以直接拿来就用.例如Array String 等等.JavaScript一共有12内置对象    ...

  8. JavaScript中的原型链和继承

    理解原型链 在 JavaScript 的世界中,函数是一等公民. 上面这句话在很多地方都看到过.用我自己的话来理解就是:函数既当爹又当妈."当爹"是因为我们用函数去处理各种&quo ...

  9. JavaScript -- 继承与原型链

    JavaScript对象有一个指向一个原型对象的链,当试图访问一个对象的属性的时候,他不仅仅会在该对象上面搜寻,还会搜寻该对象的原型,以及对象的原型的原型,依次层层搜索,直到找到名字匹配的属性或者到达 ...

随机推荐

  1. Linux基础练习题(三)

    1.显示当前系统上root.fedora或user1用户的默认shell: [root@www ~]# egrep "^(root|fedora|user1)" /etc/pass ...

  2. Docker中部署Kubernetes

    Kubernetes为Google开源的容器管理框架,提供了Docker容器的夸主机.集群管理.容器部署.高可用.弹性伸缩等一系列功能:Kubernetes的设计目标包括使容器集群任意时刻都处于用户期 ...

  3. Python来做应用题及思路

    Python来做应用题及思路 最近找工作头疼没事就开始琢磨python解应用题应该可以,顺便还可以整理下思路当然下面的解法只是个人理解,也欢迎大佬们给意见或者指点更好的解决办法等于优化代码了嘛,也欢迎 ...

  4. 4-1 Linux用户管理命令详解

    1. /etc/passwd 格式 用户名:密码:UID:GID:注释:家目录:默认shell useradd  [options ]    USERNAME -u: UID  要大于等于500, - ...

  5. JMM(java内存模型)

    What is a memory model, anyway? In multiprocessorsystems, processors generally have one or more laye ...

  6. 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)

    目录 成果 运行效果图 过程 1. 首先的问题是下棋的两端应该是什么样的? 2. 接下来的问题是怎么表示,怎么存储? 3. 然后应该怎么通信呢? 代码 main.cpp chinese_chess.h ...

  7. kettle中全局变量的设置

    设置全局变量. 找到.properties文件: 在文件中设置值: 在kettle中新建一个job(不用做任何设置): 转换中获取便元的设置: 重启kettle的执行结果:

  8. [LeetCode] Shuffle an Array 数组洗牌

    Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...

  9. [LeetCode] Moving Average from Data Stream 从数据流中移动平均值

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  10. @RenderSection,@RenderPage,@RenderBody介绍

    在MVC的模板页中会用到上面三个东西,那么今天就简单归纳下各有什么作用 1.@RenderSection 用法 对CSS或JS部分模块的预留定义 例如模板页定义了@RenderSection(&quo ...