在线地址
http://js.jsrun.net/66bKp/edit
参考https://blog.csdn.net/Stars_in_rain/article/details/107248637并做了修正
【函数】中四种方法:
1.内部方法(类似私有方法,因为我很少见到这种叫法,所以此处用类似):
定义在函数内部的方法,内部方法只能被内部的方法调用。
2.实例方法(也叫对象方法):
在构造函数中this指向的是他的实例对象,函数定义时,定义函数中最外层this上方法便是实例方法,只有实例才能调用。
3.原型方法:
在prototype上添加的方法,既可以通过构造函数的原型链去调用,
也可以实例去调用
4.静态方法(也叫类方法):
是直接在构造函数上定义的方法,不能被实例调用,构造函数可以调用
//js中函数的四种方法
function Father(){
console.log("创建了一个实例")
function neibu(){
console.log("~~我是Father函数的【内部方法】")
}
this.shili2 = function(){
console.log("~~我是Father函数的【实例方法/对象方法】(写法2)");
}
console.log("===下面打印函数中的this对象:");
console.log(this); //this上有实例方法
console.log("------------");
neibu();
}
Father.prototype.yuanxing2 = function(){
console.log("~~我是Father函数的【原型方法】(写法2)");
}
Father.jingtai2 = function(){
console.log("~~我是Father函数的【静态方法/类方法】(写法2)");
}
let fa = new Father();
console.log("下面打印原型链:");
console.log(Father.prototype);//原型链上有原型方法
console.log("------------");
fa.yuanxing2(); //[用法1]用一个实例去调用
Father.prototype.yuanxing2()//[用法2]通过原型链调用
Father.jingtai2();
fa.shili2();
【类】中三种方法:
1.实例方法(也叫对象方法)
定义在构造函数constructor中的this对象上
2.原型方法
直接写在类中的方法,与constructor方法同级
3.静态方法(也叫类方法)
通过static关键字定义。
class Demo{
//类中,构造函数里的this指向的是他的实例对象
constructor(){
this.shili1=()=>{//需要实例对象来调用
console.log("~~类中的【实例方法/对象方法】(写法1)");
}
}
static jingtai1(){
console.log("~~类中的【静态方法/类方法】(写法1)");
}
yuanxing1(){//【特别注意】这儿的是原型方法
console.log("~~类中的【原型方法】(写法1)")
}
}
let demo = new Demo();
Demo.jingtai1();
demo.shili1()
demo.yuanxing1()//通过实例调用
Demo.prototype.yuanxing1()//通过原型调用