1. 构造函数

1.1 this的指向

  1. 指向 ```javascript function Car(color){ this.color = color; } //在未实例化构造函数时,this不存在

Car(); //在执行构造函数时,this存在且指向windows

var car = Car(red); //实例化后,this指向实例化对象

  1. 2. 原理
  2. ```javascript
  3. function Car(color, brand){
  4. this.color = color;
  5. this.brand = brand;
  6. //return this; -> 隐式返回了一个this
  7. }
  8. var car1 = new Car('red', 'Benz');
  9. //实例化后的过程:
  10. /*
  11. AO{
  12. this: {} //在AO生成一个this对象
  13. }
  14. function Car(color, brand){
  15. this = {
  16. color : red,
  17. brand : Benz
  18. } //此时this指向实例化对象
  19. this.color = color;
  20. this.brand = brand;
  21. }
  22. */
  23. console.log(car.color);//因此 在实例化对象中调用color可以取出AO的this中的color
  24. /*破坏构造函数*/
  25. function Car(color, brand){
  26. this.color = color;
  27. this.brand = brand;
  28. //return this; -> 隐式返回了一个this
  29. return {};//如果手动返回了引用值{},[],function(),就会破坏构造函数
  30. }
  31. var car1 = new Car('red', 'Benz');
  32. console.log(car1);//{}

2. 包装类

2.1 原始值的字符串的length方法

  1. var str = 'abc';
  2. console.log(str.length); //3
  3. /*
  4. 原理:
  5. str.length -> new String(str).length
  6. */

2.2 数组的截断方法

  1. var arr = [1, 2, 3, 4, 5];
  2. arr.length = 3;
  3. console.log(arr); // [1, 2, 3]
  4. arr = [1, 2, 3, 4, 5];
  5. arr.length = 6;
  6. console.log(arr); // [1, 2, 3, 4, 5, empty]
  7. //若是字符串
  8. var str = 'abc';
  9. str.length = 1;
  10. /*
  11. 原理:
  12. str.length = 1 -> new String(str).length = 1 -> delete new String(str).length
  13. */
  14. console.log(str); //abc
  15. //笔试题
  16. //1.
  17. var name = 'languiji';
  18. name += 10;
  19. var type = typeof(name);
  20. if(type.length === 6){
  21. type.text = 'string';
  22. /*
  23. new string(type).text = 'string';
  24. delete;
  25. */
  26. }
  27. console.log(type.text);
  28. //2.

2.3 笔试题 ❓

  1. //笔试题
  2. //1.
  3. var name = 'languiji';
  4. name += 10;
  5. var type = typeof(name);
  6. if(type.length === 6){
  7. type.text = 'string';
  8. /*
  9. new string(type).text = 'string';
  10. delete;
  11. */
  12. }
  13. console.log(type.text);
  14. //2.
  15. function Test(){
  16. var d = 1;
  17. function f(){
  18. d++;
  19. console.log(d);
  20. }
  21. this.g = f;
  22. }
  23. var test1 = new Test();
  24. test1.g();//2
  25. test1.g();//3
  26. var test2 = new Test();
  27. test2.g();//2 ❓实例化后的AO有2个吗?
  28. //3.
  29. var x = 1,
  30. y = z = 0;
  31. function add(n){
  32. return n = n + 1;
  33. }
  34. y = add(x);
  35. function add(n){
  36. return n = n + 3;
  37. }
  38. z = add(x);
  39. console.log(x, y, z);//1 4 4
  40. //4.
  41. function foo1(x){
  42. console.log(arguments);
  43. return x;
  44. }
  45. foo1(1,2,3,4,5); //能打印
  46. function foo2(x){
  47. console.log(arguments);
  48. return x;
  49. }(1,2,3,4,5);
  50. (function foo3(x){
  51. console.log(arguments);
  52. return x;
  53. })(1,2,3,4,5);//能打印
  54. //5
  55. function b(x, y, a){
  56. a = 10;
  57. console.log(arguments[2])
  58. }
  59. b(1, 2, 3);//10

3.作业

  1. /*写一个函数,接受任意一个字符串,算出这个字符串的总字节数(0-255位位1个字节,其后为2个字节) str.charCodeAt(字符下标)*/
  2. function test(str) {
  3. var sum = 0;
  4. for (var i = 0; i < str.length; i++) {
  5. var item = str.charCodeAt(i);
  6. if (item <= 255) {
  7. sum += 1;
  8. } else {
  9. sum += 2;
  10. }
  11. }
  12. return sum;
  13. }
  14. console.log(test("abc"));
  15. //第二种办法
  16. function test(str){
  17. var sum = str.length;
  18. for(var i = 0;i < str.length; i++){
  19. var item = str.charCodeAt(i);
  20. if(item > 255){
  21. sum++;
  22. }
  23. }
  24. return sum;
  25. }
  26. console.log(test("abc你好"));