js-静态、原型、实例属性

本篇来说一下js中的属性:

1、静态属性

2、原型属性

3、实例属性

静态属性:

function klass(){}
var obj=new klass();
klass.count=0;
klass.count++;
console.log(obj.count);//undefined
console.log(klass.count);//1

静态属性存在于对象中。它的访问方式只有:类名.count 一种方式,无法通过实例访问。

如:Math.PI


原型属性:

在讲解原型属性之前有必要先提一下new操作符:
     ①:var obj=klass()和②:var obj=new klass()的结果显然是不同的。
     ①的操作仅仅是简单的调用klass函数,然后把klass函数的返回值赋给obj变量。
     ②所做的操作是:调用构造函数klass,创建一个包含prototype内部指针的新对象obj。

     直观看来:使用new操作符是创建该类的实例对象,而不使用new操作符则是直接调用函数。

好了,下面继续看原型属性:

原型属性又称公共属性,它不属于某个类的实例,而是直接属于某个类。

function klass(){}
var obj=new klass();
klass.prototype.count=0;
klass.prototype.count++;
console.log(klass.prototype.count);//1
console.log(obj.count);//1
原型属性存在类的原型之中。它的访问方式有两种:

1、类名.prototype.count

2、实例对象.count

第二种访问方式的原理是:

首先在实例对象中查找,如果找到则立即返回,否则在原型(原型链)中查找(因为new操作符创建的对象包含了一个prototype的内部指针,所以可以向上追溯,查找属性),找到则返回相应的值,否则返回undefined。

所以obj.count的方式实际操作的是klass.prototype.count属性。

再看下面的例子:

function klass(){}
var obj=new klass();
klass.prototype.count=0;
klass.prototype.count++;
obj.count++;
console.log(klass.prototype.count);//1
console.log(obj.count);//2

与上面不同的是仅仅加了一句obj.count++;按照属性查找的原理,obj中并不存在count属性,所以他会在原型链中查找count属性,返回klass.prototype.count。

obj.count++即可拆分为更加直观的:obj.count=klass.prototype.count+1;可以看出这一句话是简单的赋值也是属性定义:

首先给obj定义了一个实例属性count,再将klass.prototype.count+1的结果赋值给obj.count。

所以klass.prototype.count的结果为1,obj.count的结果是2。

以上便是要讲解的第三者属性:实例属性。

实例属性是公开的(public),可以通过类的实例(或this.)直接访问和修改它。也就是归属实例所有。


明白了相应的概念,我们再来讲一下他们各自的使用场合,看下面的例子:

function klass(id){
  this.id=id;
}

klass.Uid=1;

klass.prototype.names=[];

var obj1=new klass("obj1");
var obj2=new klass("obj2");
obj1.names.push(obj1.id);
klass.Uid++;
obj1.names.push(obj2.id);
klass.Uid++;
console.log(obj1.id);//obj1
console.log(obj2.id);//obj2
console.log(klass.prototype.names);//obj1 , obj2
console.log(klass.Uid);//3

 
 
 
 
 他们的应用场合显而易见,静态属性是全局的,原型属性是实例公有的,实例属性是各个实例所独有的。 


js的属性篇基本就到此结束,有疑问或错误之处欢迎指出,请大家多多赐教。

预告:下一篇讲解js的方法——js-静态、原型、实例方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值