prototype原型解析
2024-09-03 11:19:39
每个对象都有原型,
prototype能够实现实例共享,节约使您有能力向对象添加属性和方法。
如
<script type="text/javascript"> function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
} var bill=new employee("Bill Gates","Engineer",1985);employee.prototype.salary=null;
bill.salary=20000; document.write(bill.salary); </script> prototype可以封装私有的function,通过return的形式暴露出简单的使用名称,以达到public/private的效果
Calculator.prototype = function () {
add = function (x, y) {
return x + y;
}, subtract = function (x, y) {
return x - y;
}
return {
add: add,
subtract: subtract
}
} (); //alert((new Calculator()).add(11, 3));
例二:
var BaseCalculator = function() {
this.decimalDigits = 2;
}; BaseCalculator.prototype = {
add: function(x, y) {
return x + y;
},
subtract: function(x, y) {
return x - y;
}
};
创建完上述代码以后,我们来开始:
var Calculator = function () {
//为每个实例都声明一个税收数字
this.tax = 5;
}; Calculator.prototype = new BaseCalculator();
Calculator的原型是指向到BaseCalculator的一个实例上,目的是让Calculator集成它的add(x,y)和subtract(x,y)这2个function,还有一点要说的是,由于它的原型是BaseCalculator的一个实例,所以不管你创建多少个Calculator对象实例,他们的原型指向的都是同一个实例。
var calc = new Calculator();
alert(calc.add(1, 1));
//BaseCalculator 里声明的decimalDigits属性,在 Calculator里是可以访问到的
alert(calc.decimalDigits);
上面的代码,运行以后,我们可以看到因为Calculator的原型是指向BaseCalculator的实例上的,所以可以访问他的decimalDigits属性值,那如果我不想让Calculator访问BaseCalculator的构造函数里声明的属性值,那怎么办呢?这么办:
var Calculator = function () {
this.tax= 5;
}; Calculator.prototype = BaseCalculator.prototype;
通过将BaseCalculator的原型赋给Calculator的原型,这样你在Calculator的实例上就访问不到那个decimalDigits值了,如果你访问如下代码,那将会提升出错。
var calc = new Calculator();
alert(calc.add(1, 1));
alert(calc.decimalDigits);
最新文章
- 使用DapperExtensions实现简单仓储
- Maven_profile_使用profile配置不同环境的properties(实践)
- 谈谈pooling?
- 关于一些学习html和css的笔记
- PROTEL DXP原理图编译 常见错误与处理方法
- iOS7上在xib中使用UITableViewController设置背景色bug
- PowerShell使用SMTP发送邮件
- 编写C# Windows服务,用于杀死Zsd.exe进程
- javascript笔记3之数据类型
- Hat’s Words(字典树)
- 自己封装的tc
- 机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 http://www.ai-start.com/
- 生产者与消费者 代码实现 java
- hibernate向mysql数据库插入中文显示??
- CSS:关于CSS Hack
- JavaScript的DOM_通过计算后样式来获取
- CSS3 圆环状进度条
- CentOS下MySQL的安装过程
- 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2
- NGUI UILabel文字宽度和 UITweener