pro js读书笔记1

1首先我们来看一下js中的public method:

[code]// 创建一个User的构造函数
function User( name, age ){
this.name = name;
this.age = age;
}

// 加一个新的函数getName到User的prototype.
User.prototype.getName = function(){
return this.name;
};

//加另一个函数getAge到 User的prototype.
User.prototype.getAge = function(){
return this.age;
};

//实例化User对象
var user = new User( "Bob", 44 );

// 测试代码
alert( user.getName() == "Bob" );
alert( user.getAge() == 44 );[/code]

简单的使用构造函数和prototype属性即可以构造出oo中的 public 方法。

2 紧接着我们来看private方法:
[code]function Classroom(students, teacher ) {
//将student和teacher设置为public属性.
this.students = students;
this.teacher = teacher;
//创建了一个私有的方法disp,展示出所有的学生的名字.
function disp() {
alert(students.join(", ") );
}
// 调用私有的方法
disp();
}

// 创建一个Classroom的对象
var b = new Classroom(["John", "Bob"], "Mr. Smith" );

//会提示出错,因为这里disp是一个私有的方法
b.disp();[/code]

3 再来看一下privileged方法,所谓privileged方法也就是可以存取private属性的方法。
[code]function User( name, age ) {
//这边years被设置为一个私有的属性.
var years = (new Date()).getFullYear()-age;

//创建了一个 Privileged方法来存取私有的years属性.
this.getYearBorn = function(){
return years;
};
}

// 创建了一个user对象
var user = new User( "Bob", 44 );

// 测试方法
alert( user.getYearBorn() == 1962 );

//这个将会显示true,这是由于years为私有方法.
alert( user.years == null );[/code]

这边要注意的是getYearBorn是一个动态创建的方法,也就是在运行时被加到对象的,而不是首次编译的时候。这种方法非常的power和flexible.我们可以紧接着看下面的例子:这个例子书里面的代码有错,我改了一下,可是改了之后并不能实现书中想实现的功能。
[code]function User( properties ) {
var temp=this;
for ( var i in properties ) { (function(){

temp[ "get" + i ] = function() {
return properties[i];
};


temp[ "set" + i ] = function(val) {
properties[i] = val;
};
})(); }
}


var user = new User({
name: "Bob",
age: 44
});


alert( user.name == null );


alert( user.getname() == "Bob" );


user.setage( 22 );
alert( user.getage() == 22 );[/code]
这边 user.getname会直接返回44,lich给我的解释是:
[quote]
ECMA 给出的函数优化方法对于命令式语言是有问题的,所有的 get[i] 函数因为代码同源,所以都是一个,set[i] 们也是一样。所以怎么变,都是返回一个上次 set[i] 后的值。换句话说,具有讽刺意味的是,properties[i] 都已经被固化为一个地址了,for 取的第一个地址。更令人沮丧的是,使用函数生成器也是没用的。目前还没想到什么好办法。[/quote]
最后我们来看下静态方法:
[code]
User.cloneUser = function( user ) {
//创建并返回一个User对象
return new User(
//这边可以说是克隆了一个user对象.
user.getName(),
user.getAge()
);
};[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值