【前端】JavaScript入门及实战61-65

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

61 this(1)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset = "utf-8">
  6. <script type="text/javascript">
  7.         /*       
  8.                 解析器再调用函数每次都会向函数内部传递进一个隐含的参数,
  9.                 这个隐含的参数就是this,this指向的是一个对象,
  10.                 这个对象我们称为函数执行的上下文对象,
  11.                 根据函数调用方式的不同,this会指向不同的对象
  12.                         1. 以函数的形式调用时,this永远都是window
  13.                         2. 以方法的形式调用时,this就是调用方法的那个对象               
  14.         */
  15.        
  16.         function fun(a, b){
  17.                 //console.log(a + b);
  18.                 //console.log(this); // object window
  19.                 console.log(this.name);
  20.         }
  21.        
  22.         fun(123, 456);
  23.        
  24.         // 创建一个对象
  25.         var obj = {
  26.                 name: "孙悟空";
  27.                 sayName: fun
  28.         };
  29.        
  30.         //console.log(obj.sayName == fun); // true
  31.         //obj.sayName(); // object,this就是obj
  32.         var name = "全局的name属性";
  33.         fun(); // window // window.name->"全局的name属性"
  34.        
  35.         // 以方法的形式调用,this是调用方法的对象
  36.         obj.sayName(); // "孙悟空"       
  37. </script>
  38. <style>
  39. </style>
  40. </head>
  41. <body>
  42. </body>
  43. </html>
复制代码
62 this(2)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset = "utf-8">
  6. <script type="text/javascript">
  7.         // 创建一个name变量
  8.         var name = "全局";
  9.        
  10.         // 创建一个fun()函数
  11.         function fun(){
  12.                 console.log(name); // "全局"
  13.                 console.log(this.name); // "孙悟空"
  14.         }
  15.        
  16.         // 创建两个对象
  17.         var obj = {
  18.                 name: "孙悟空",
  19.                 sayName: fun
  20.         };
  21.        
  22.         // 创建两个对象
  23.         var obj2 = {
  24.                 name: "沙和尚",
  25.                 sayName: fun
  26.         };
  27.        
  28.         obj.sayName();       
  29. </script>
  30. <style>
  31. </style>
  32. </head>
  33. <body>
  34. </body>
  35. </html>
复制代码
63 对象

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset = "utf-8">
  6. <script type="text/javascript">       
  7.         // 创建一个对象
  8.         var obj = {
  9.                 name: "孙悟空",
  10.                 age: 18,
  11.                 gender: "男",
  12.                 sayName: function(){
  13.                         alert(this.name);
  14.                 }
  15.         };
  16.        
  17.         var obj2 = {
  18.                 name: "猪八戒",
  19.                 age: 28,
  20.                 gender: "男",
  21.                 sayName: function(){
  22.                         alert(this.name);
  23.                 }
  24.         };
  25.         var obj3 = {
  26.                 name: "沙和尚",
  27.                 age: 38,
  28.                 gender: "男",
  29.                 sayName: function(){
  30.                         alert(this.name);
  31.                 }
  32.         };
  33.        
  34.         /*
  35.                 使用工厂方法创建对象
  36.                 通过该方法可以大批量的创建对象
  37.         */
  38.         function createPerson(name, age, gender){
  39.                 // 创建一个新的对象
  40.                 var obj = new Object();
  41.                
  42.                 // 向对象中添加属性
  43.                 obj.name: name,
  44.                 obj.age: age,
  45.                 obj.gender: gender,
  46.                 obj.sayName: function(){
  47.                         alert(this.name);
  48.                 }
  49.                
  50.                 // 将新的对象返回
  51.                 return obj;
  52.         }
  53.        
  54.         var obj5 = createPerson("孙悟空", 18, "男");
  55.         var obj6 = createPerson("白骨精", 18, "女");
  56.         var obj7 = createPerson("唐三藏", 28, "男");
  57.         obj5.sayName(); // 白骨精
  58.        
  59.         // 创建狗的对象
  60.         function createDog(name, age){
  61.                 var obj = new Object();
  62.                 obj.name: name,
  63.                 obj.age: age,
  64.                 obj.sayName: function(){
  65.                         alert("汪汪汪");
  66.                 }
  67.                 return obj;
  68.         }
  69.                
  70.         // 创建一个狗的对象
  71.         var dog = createDog("旺财", 3);
  72.        
  73.         /*
  74.                 使用工厂方法创建的对象,使用的构造函数都是Object,
  75.                 所以创建的对象都是Object这个类型,
  76.                 就导致我们无法区分处多种不同种类的对象
  77.         */       
  78. </script>
  79. <style>
  80. </style>
  81. </head>
  82. <body>
  83. </body>
  84. </html>
复制代码
64 构造函数(1)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset = "utf-8">
  6. <script type="text/javascript">
  7.        
  8.         /*
  9.                 创建一个构造函数,专门用来创建Person对象的,
  10.                 构造函数就是一个普通的函数,创建方式和普通函数没有区别,
  11.                 不同的是构造函数习惯上首字母大写
  12.                
  13.                 构造函数和普通函数的区别就说调用方式的不同,
  14.                 不同函数是直接调用。构造函数需要使用new关键字来调用
  15.                
  16.                 构造函数的执行流程
  17.                 1. 立刻创建一个新的对象
  18.                 2. 将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
  19.                 3. 逐行执行函数中的代码
  20.                 4. 将新建的对象作为返回值返回
  21.                
  22.                 使用同一个构造函数创建的对象,称为一类对象,也将一个构造函数称为一个类,
  23.                 我们通过一个构造函数创建的对象,称为该类的实例
  24.                
  25.                 this的情况:
  26.                 1. 当以函数的形式调用时,this是window
  27.                 2. 当以方法的形式调用时,谁调用方法this就是谁
  28.                 3. 当以构造函数的形式调用时,this就是新创造的那个对象
  29.         */
  30.        
  31.         function Person(name, age, gender){
  32.                 this.name = name;
  33.                 this.age = age;
  34.                 this.gender = gender;
  35.                 this.sayName = function(){
  36.                         alert(this.name);
  37.                 };
  38.         }
  39.        
  40.         var per = new Person("孙悟空", 18, "男");
  41.        
  42.         function Dog(){
  43.                
  44.         }
  45.        
  46.         var per = new Dog();
  47.        
  48.         /*
  49.                 使用instanceof可以检查一个对象是否是一个类的实例
  50.                 语法:对象instanceof 构造函数
  51.                 如果是返回true,否则返回false
  52.         */
  53.         console.log(per instanceof Person); //false
  54.         alert(per instanceof Person);
  55.        
  56.         /*
  57.                 所有的对象都是Object的后代,
  58.                 所以任何对象和Object做instanceof检查时,都会返回true
  59.         */
  60.         console.log(per instanceof Object); //true
  61. </script>
  62. <style>
  63. </style>
  64. </head>
  65. <body>
  66. </body>
  67. </html>
复制代码
65 构造函数(2)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta charset = "utf-8">
  6. <script type="text/javascript">
  7.         /*
  8.                 创建一个Person构造函数
  9.                         在Person构造函数中,为每一个对象都添加了一个sayName方法,
  10.                         目前我们的方法是在构造函数内部创建的,
  11.                         也就是构造函数每执行一次都会创建一个新的sayName方法,
  12.                         也就是所有实例的sayName都是唯一的。
  13.                        
  14.                         这样就导致了构造函数执行一次就会创建一个新的方法,
  15.                         执行10000次就会创建10000个新的方法,而10000个方法都是一样的,
  16.                         这事完全没有必要的
  17.                        
  18.         */
  19.         function Person(name, age, gender){
  20.                 this.name = name;
  21.                 this.age = age;
  22.                 this.gender = gender;
  23.                 //向对象中添加一个方法
  24.                 this.sayName = fun;
  25.         }
  26.        
  27.         //将sayName方法在全局作用域中定义
  28.         /*
  29.                 将函数定义在全局作用域,污染了全局作用域的命名空间,
  30.                 而且定义在全局作用域中也很不安全
  31.         */
  32.         function fun(){
  33.                 alert("Hello大家好,我是:" + this.name);
  34.         };
  35.        
  36.         //向原型中添加sayName方法
  37.         Person.prototype.sayName = function(){
  38.                 alert("Hello大家好,我是:" + this.name);
  39.         };       
  40.        
  41.         //创建一个Person实例
  42.         var per = new Person("孙悟空", 18, "男");
  43.         console.log(per.sayName == per2.sayName); // false               
  44. </script>
  45. <style>
  46. </style>
  47. </head>
  48. <body>
  49. </body>
  50. </html>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表