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定义的函数也添加到活动对象当中;
函数定义的方法有:函数表达式,函数声明(当函数声明有提升)
当变量和函数同名时,函数提升比变量提升优先级高