JesseZhao1990 / blog

learing summary
MIT License
62 stars 7 forks source link

js中静态方法、实例方法的区别 #114

Open JesseZhao1990 opened 6 years ago

JesseZhao1990 commented 6 years ago

静态方法

function A(){

}
A.staticFn = function(){
    console.log('this is a static function')
}

实例方法

function A(){

}

A.prototype.instanceFn = function(){
    console.log('this is a instance function')
}

静态方法在实例中无法访问,实例方法也没法在构造函数上取到,因此下面两例的输出都将是undefined.

function A(){

}
A.staticFn = function(){
    console.log('this is a static function')
}

A.prototype.instanceFn = function(){
    console.log('this is a instance function')
}

console.log(A.instanceFn)    // undefined
function A(){

}

A.staticFn = function(){
    console.log('this is a static function')
}

A.prototype.instanceFn = function(){
    console.log('this is a instance function')
}

var aa = new A()
console.log(aa.staticFn)    // undefined

静态方法和实例方法的取舍和选用

什么情况下我们应该把一个方法设计为静态方法?什么场景下我们应该把一个方法设计为实例方法呢?一般来说和实例相关的事情我们要设计为实例方法。向原型上挂载实例方法和属性的时候,我们应该设计为尽量设计为静态方法