js-静态、原型、实例属性
来源:互联网 发布:js定时执行函数 编辑:程序博客网 时间:2024/05/29 19:02
本篇来说一下js中的属性:
1、静态属性
2、原型属性
3、实例属性
静态属性:
function klass(){}var obj=new klass();klass.count=0;klass.count++;console.log(obj.count);//undefinedconsole.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);//1console.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);//1console.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);//obj1console.log(obj2.id);//obj2console.log(klass.prototype.names);//obj1 , obj2console.log(klass.Uid);//3他们的应用场合显而易见,静态属性是全局的,原型属性是实例公有的,实例属性是各个实例所独有的。
js的属性篇基本就到此结束,有疑问或错误之处欢迎指出,请大家多多赐教。
预告:下一篇讲解js的方法——js-静态、原型、实例方法
- js-静态、原型、实例属性
- js-静态、原型、实例属性
- 静态属性-原型属性-实例属性
- js-静态、原型、实例方法
- js中静态方法(属性)、实例方法(属性)、内部方法(属性)和原型的一点见解
- JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链
- JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链
- js实例属性和原型属性示例详解
- js面向对象原型属性和实例属性
- js的原型实例prototype--方法--属性,构造,赋值--方法同样有原型--原型含义
- js属性具体存在位置(实例/原型)
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性
- js----prototype原型属性
- JS原型继承实例
- js原型proto实例
- js原型链实例
- js 实例 及 原型
- (转载)js对象原来也有类、实例属性和原型属性
- 什么是RUP
- Error: …… ,Manifest merger failed with multiple 解决方案
- 设置Maven项目使用的jdk版本
- Java类加载机制——案例分析
- Uvalive 7037 The Problem Needs 3D Arrays (最大密集子图)
- js-静态、原型、实例属性
- win7下模拟溢出漏洞利用shellcode弹出计算器
- 基于phpmailer的企业邮箱发送邮件
- Java网络编程之BIO(Socket 伪异步)-yellowcong
- 《着色器和屏幕特效》读书笔记第十章-高级着色技术
- JavaScript读书学习笔记(四)——DOM
- Please check the configured value for ha.zookeeper.quorum and ensure that ZooKeeper is running.
- java中的“|=”的使用方法
- PAT1005. 继续(3n+1)猜想 (25)