js的原型、静态、实例、内部等分析

最近对js的实例静态这些词有点头痛,网上很多看起来特别乱,什么公有私有内部特权原型实例静态的属性或方法,好像都差不多但每个地方写的又都不一样,头都大了,还是自己整理一下思路,一点一点理顺摸清楚吧。

原型方法、静态(类)方法、实例(对象)方法,内部方法

首先方法分好几种,根据网上的,总结了四种:
原型方法就是prototype,一般是 类名.prototype.方法名=函数 这样表现(Test.prototype.prototypeMethod=function(){…})

静态方法又有类方法的说法,一般是 类名.方法名=函数 这样表现(Test.staticMethod=function(){…})

实例方法又有称为对象方法,有两种方式:
类的内部 this.方法名=函数 这样表现(this.instanceMethod=function(){…})
类的外部 new对象对象名.方法名=函数 这样表现(var a=new Test(); a.instanceMethod=function(){…})

内部方法是创建在类内部的,外部无法访问,一般是 类的内部var 方法名=函数 这样表现(var innerMethod=function(){…})

下面演示一下

var Test=function() {
    //实例方法(第一种创建方式,在函数内部创建)
    this.instanceMethod1 = function () {
        console.log('instance1');
    }
    //内部方法
    var innerMethod=function(){
        console.log('inner');
    }
}

//静态方法
Test.staticMethod=function(){
    console.log('static');
};
//原型方法
Test.prototype.prototypeMethod=function(){
    console.log('prototype');
}

//实例方法(第二种创建方式,在函数外部由对象创建)
var a=new Test();
a.instanceMethod2 = function () {
        console.log('instance2');
    }

这段代码分别定义了四个方法,通过验证:

实例方法如果定义在函数内部,可以在外部new对象调用或在函数内部用this调用this.instanceMethod();
但如果是在外部用new对象定义的,只能由那个对象调用,重新new的对象和内部都无法调用。

内部方法无法从外部调用,但是可以在函数内部直接或间接调用innerMethod();(内部this调用也不行)

静态方法可以在任意位置直接用类名调用Test.static();

原型方法可以在外部new对象调用或在内部this调用(不需要加prototype),或在任意位置直接Test.prototype.prototypeMethod()调用。

实例和原型有点相似,有不少地方把他们统称实例方法或属性。如果实例的两种方式和原型都创建了相同名字的方法时,这3个方法在调用时的顺序是怎样呢?
new对象调用时,等级是 函数外实例方法>函数内实例方法>原型方法,也就是它会先找该对象是否创建了要调用的实例方法,如果没有再在函数内部找,再没有就在prototype里找。
函数内this调用时,就只有 函数内实例方法>原型方法了,因为外部对象创建的实例方法仅属于那个对象而已。

这几个方法有点难以分辨,简单的说原型方法是带prototype的,静态方法前面有类名且没有prototype,内部方法是在函数里面用var定义的,实例方法是通过对象或this定义的。

原型属性、静态(类)属性、实例(对象)属性,内部属性

通过测试验证,使用方法规则和上面一样,只是将方法换成了属性而已,代码如下,就不细说了

var Test=function() {
    //实例属性
    this.instance1 = 'instance1';
    //内部属性
    var inner = 'inner';
}

//静态属性
Test.static='static';

//原型属性
Test.prototype.proto='proto';

//实例属性(第二种创建方式,在函数外部由对象创建)
var a=new Test();
a.instance2 = function () {
    console.log('instance2');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值