声明提前、原型、静态方法的一些所得

一、声明提前:

声明提前有3个过程:创建、初始化、赋值:

console.log(x);    // undefined
function xxx(){};
var x=10;

// 等同于
var x=undefined;    // 创建并初始化
function xxx(){};
x=10;    // 赋值

然而let只创建不赋值:

console.log(x);    // 报错
let x=10;
function xxx(){};

// 等同于
let x;
function xxx(){};

二、原型

通常我们会这样创建一个对象:

var Plane=function(){
    this.name='plane';
}

var plane=new Plane();
plane.name='plane1';

我们除了通过new一个实例外,还可以通过克隆:

var plane2=Object.create(plane);

我们在JavaScript遇到的每个对象,实际上都是从Object.prototype对象克隆而来的,Object.prototype就是它们的原型。用new运算符来创建对象的过程,实际上也只是先克隆Object.prototype对象,再进行一些其他额外操作的过程。

JavaScript给对象提供了__proto__,某个对象的__proto__属性默认会指向它的构造器的原型对象:

function Animal(name){
     this.name=name;
}

var dog=new Animal();
console.log(dog.__proto__===Animal.prototype);    // true

三、静态方法

通过static定义鼎泰方法,静态方法可以直接调用:

class Animal{
    spaeak(){
        return this;
    }
    static eat(){
        return this;
    }
}

Animal.speak();    // 报错
Animal.eat();    // 直接调用

猜你喜欢

转载自www.cnblogs.com/jingouli/p/11355203.html