javascript原型链与特权方法
来源:互联网 发布:用户数据加密存储模块 编辑:程序博客网 时间:2024/06/06 14:01
function ClassA() { var value=4; this.getValue= function() { return value; } this.setValue= function(value) { this.value=value; } } var instance= new ClassA(); document.write(instance.getValue()); classA.setValue(1); document.write(instance.getValue()); document.write(instance.value);
输出结果为:4,4,1。
原因是:var value 是私有变量,它与this.value不是同一个值。
下面我们分析下对象实例的创建与私有变量如何访问。
1.实例属性与原型属性
javascript对象创建实例时,实例属性和方法只有通过构造函数中的this,才可以赋给实例。如果想创建共享的属性或者方法,那么可以通过原型链共享。
创建共享的属性:
function ClassA() { var value=4; this.getValue= function() { return value; } this.setValue= function(value) { this.value=value; } } ClassA.prototype.value=1;//共享的value var instance1=new ClassA(),// instance2=new ClassA(); consloe.log(instance1.value);//1 consloe.log(instance2.value);//1 console.log(ClassA.value);//undefined
那么ClassA()中的私有属性value我们可以通过ClassA.value访问吗?答案是不能。
我们分析下对象实例中标识符的查找。实例查找一个属性时,分为两步:
(1).在实例本身的实例属性中查找。
(2).如果查找不到实例属性,那么顺着原型链会找到对象的原型。
ClassA.value 在ClassA的实例属性中查找不到,那么继续查找原型链,ClassA是Object的实例,因此会查找Object.prototype.value,显然值为undefined。
2.私有变量的访问
我们知道,javascript没有块级作用域,但是我们可以通过函数来模拟块级作用域。而块级作用域里面的变量,称为私有变量。私有变量,外部无法访问,我们可以在函数内部
生成特权方法(特权方法:能够访问私有变量的方法),这里的特权方法就是this.getValue();通过构造函数创建,是创建特权方法的一种方法。
创建特权方法的另外一种方式就是:静态方法。
function ClassA() { var value=4; this.getValue= function() { return value; } this.setValue= function(value) { this.value=value; } ClassA.getValue=function(){ //静态方法 return value; } }
0 0
- javascript原型链与特权方法
- javascript原型与原型链
- JavaScript原型与原型链
- javascript原型与原型链
- 【JS】JavaScript中的私有变量与特权方法
- JavaScript闭包--特权方法
- 【javascript基础】原型与原型链
- javascript原型链与原型继承
- JavaScript原型与原型链分析
- javascript原型与原型链终极详解
- JavaScript 原型、原型链与继承
- JavaScript原型与原型链分析
- javascript原型对象与原型链
- JavaScript原型与原型链学习总结
- JavaScript原型与原型链分析
- JavaScript原型与原型链分析
- javascript的原型与原型链
- JavaScript的原型与原型链
- 股票领悟
- ionic AngularJS-设定ion-scroll div 动态高度
- 英语学习的一些高级句型
- 点击屏幕空白实现键盘回收的几种方法
- Nmap 源码学习三 nmap_main主程序分析
- javascript原型链与特权方法
- 我看我自己系列——痛苦扭曲了我的思维:累人的生活
- python字符串前缀 u和r的区别
- YARN系统官方文档翻译
- 实现字符串的反转及替换
- Day8.结构体链表
- array in Java
- ionic Angularjs 产生简单的列表滚动区域
- mysql配置文件my-small.ini、my-medium.ini、my-large.ini、my-huge.ini 详解