jQuery进阶第四天(2019 10.13)

1 初识面向对象(面向对象是一种思维方式

以前写的代码

1 var name = '莉莉';
2 var sex = '女';
3 var age = 18;
4 var name1 = '小明';
5 var sex1 = '男';
6 var age1 = 19;

面向对象的代码:

 1 var lili = {
 2     name: 'lili',
 3     sex: 'nv',
 4     age: 18
 5 }
 6 var xiaoming = {
 7     name: 'xiaoming',
 8     sex: 'nan',
 9     age: 19
10 } 

2 简单工厂

简单工厂:people函数可以产生对象,根据传入的参数不同产生的对象也不同

        参数===原料, 对象===产品

 1 function people(name, sex, age) {
 2             // 声明一个空对象
 3             var obj = {};
 4             // 给属性赋值
 5             obj.name = name;
 6             obj.sex = sex;
 7             obj.age = age;
 8             // 添加方法
 9             obj.show = function() {
10                 console.log("我叫" + this.name + ', 我今年' + this.age + '岁,我是一个' + this.sex + '生!');
11             }
12             // 返回对象
13             return obj;
14         }

简单工厂的缺陷:通过工厂产生的对象,没有办法区分种类

3 构造函数

1、构造函数首字母大写,但这不是语法要求,作为书写习惯

2、构造函数使用new 关键字调用

new操作的过程

    1、在内存中申请了一块空间

    2、改变this指向(this默认指向window对象,this指向要生成的对象)

    3、为this赋值

    4、返回this指向的对象

return对构造函数的影响(结论:非引用的返回值没有影响,引用类型的返回值会取代this所指向的对象

说法:(实例、类、实例化)

    将产生的对象称之为实例(实例化对象)

    new过程称之为实例化

 将构造函数称之为

 1     <script>
 2     function People(name, sex, age) {
 3     // 给属性赋值
 4     this.name = name;
 5     this.sex = sex;
 6     this.age = age;
 7     // 添加方法
 8     this.show = function() {
 9         console.log("我叫" + this.name + ', 我今年' + this.age + '岁,我是一个' + this.sex + '生!');
10     }
11 }
12 var xiaoming = new People('小明', '男', 18);
13     </script>

5 备份this(当指定对象不是this的指定对象 就会默认window对象为指定对象 这时就得备份);

 1 <script>
 2          var obj = {
 3         name1: 'aaa',
 4         demo: function() {
 5             console.log(this.name1);
 6         },
 7         test: function() {
 8             // 备份this
 9             var me = this;
10             (function() {
11                  // 此处this不会指向obj对象,指向的是window对象
12                  // console.log(this.name1);
13                  console.log(me.name1);
14              })();
15          }
16         }      
17     obj.demo(); 
18     // window.name1 = 333;
19     obj.test();
20 </script>

 

 

原文地址:https://www.cnblogs.com/lvlisn/p/11671702.html