1.new操作做了啥
要创建Person的新实例,必须使用new操作符。
以这种方式调用构造函数实际上会经历以下4个步骤:
(1)创建一个新对象;
(2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
(3)执行构造函数中的代码(为这个新对象添加属性);
(4)返回新对象。
2.谈谈你对this的理解
普通函数中:this->window
定时器中:this->window
构造函数中:this->当前实例化的对象
事件处理函数中:this->事件触发对象
在js中一般理解就是谁调用这个this就指向谁
3.几种继承方式
1.扩展原型对象实现继承
function Animal(name,color,say){
this.name = name;
this.color = color;
this.say = function(){
console.log('喵喵喵');
}
}
var cat = new Animal('cat','white');// 如果给Animal的prototype属性上
添加个 cry 方法 ,那么实例对象 cat将也会有 cry方法
Animal.prototype.cry = function(){
console.log('呜呜呜');
}
2.利用apply(),和call实现继承
function person(name,age)
{
this.name = name;
this.age = age;
}
function man(name,age){
person.apply(this,[name,age]); //这里就是伪造成person的一个事例
}
var Man = new man('wozien',12);
console.log(Man.name);
console.log(Man.age);
3.组合call+prototype,最常用的一种方式
function person(name)
{
this.name = name;
}
person.prototype.showName = function(){
return this.name;
}
function man(name,age){
person.call(this,name);
this.age = age; //这里就是伪造成person的一个事例
}
man.prototype = new person();
man.prototype.showAge = function(){
return this.age;
}
var Man = new man('wozien',12);
Man.showName(); //wozien
Man.showAge(); //12
4.apply,call,和bind有什么区别
三者都可以把一个函数应用到其他对象上,注意不是自身对象.
apply,call是直接执行函数调用,
bind是绑定,执行需要再次调用.
apply和call的区别是
apply接受数组作为参数,而call是接受逗号分隔的无限多个参数列表
5.Js的原型和原型链 原型链的应用
每个对象都会在其内部初始化一个属性,就是prototype(原型),
当我们访问一个对象的属性时,
如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,
这个prototype又会有自己的prototype,
于是就这样一直找下去,
也就是我们平时所说的原型链的概念。
应用:
原型链是实现继承的主要方法
6.Javascript如何实现继承?
原型链继承,借用构造函数继承,原型+构造函数组合继承
7.javascript继承的 6 种方法?
\1. 原型链继承
\2. 借用构造函数继承
\3. 组合继承(原型+借用构造)
\4. 原型式继承
\5. 寄生式继承
\6. 寄生组合式继承