day8

1- 什么是构造函数?

     在js中,使用new关键字调用的函数为构造函数,构造函数首字母一般大写.

2- 创建对象的方式有哪些?举例说明:

   (1) 使用new关键字创建:

复制代码
 var person = new Object()

        person.name = '张三';
        person.age = 12;
        person.say = function () {
            console.log('你好 我是小小怪叫兽!')
        }
        console.log(person.age)
        person.say();
复制代码

   (2) 字面量形式创建:

复制代码
var person = {

            name: '张三',
            age: 20,
            gender: '男',
            sayHai: function () {
                console.log('你好我是大大怪将军')
            }
        }
        console.log(person.name)
复制代码
   (3) 工厂模式创建:
复制代码
 function createPerson(name, age, gender) {
            var o = new Object();
            o.name = name;
            o.age = age;
            o.gender = gender;
            o.sayHai = function () {
                console.log(this.name)
            }
            return o;
        }
        var per1 = createPerson('李四', 20, '男');
        console.log(per1.name)
复制代码
(4) 构造函数形式创建:
复制代码
function Person(name,age,family) {
    this.name = name;
    this.age = age;
    this.family = family;
    this.say = function(){
        alert(this.name);
    }
}
var person1 = new Person("lisi",21,["lida","lier","wangwu"]);
var person2 = new Person("lisi",21,["lida","lier","lisi"]);
复制代码

(5) 原型模式 (6) 混合模式

3- js 种实现继承的方式:

    原型继承

    构造函数继承

    实例继承

    组合继承  (通过原型继承(方法)) + 构造函数继承(属性)

4- 什么是闭包?有什么作用?

   函数A中有一个函数B,函数B中总是可以访问函数A中的数据或者变量,这样形成了闭包

   闭包模式:函数模式的闭包湖人对象模式的闭包

   闭包作用: 缓存数据, 延长作用域链;

5- 什么是预解析?

   js代码执行之前会在相应的执行环境中(全局环境,局部环境)预先把一些东西(function,var定义的变量)解析到内存中;

   过程:

   (1)创建一个当前执行环境下的活动对象

   (2)将var声明的变量设置为活动对象的属性(也就是将其添加到活动对象当中),并将其赋值为undefined

   (3)将function定义的函数也添加到活动对象当中;

   函数定义的方法有:函数表达式,函数声明(当函数声明有提升)

   当变量和函数同名时,函数提升比变量提升优先级高

原文地址:https://www.cnblogs.com/Natural-numbers/p/14492757.html