JS问题

咸鱼boris 2012-06-04 11:08:45
我有个问题想请教下:
我现在进行面向对象设计时有个疑惑,我们定义一个类:
function A(){
}
此时我想给A增加属性:
1. function A(){
A.prop = xxx
}
2. A.prototype.prop = xxx
我不知道这两种方式孰优孰劣,在什么情况下使用哪种方式为佳?

然后我想定义一个get的方法,用于返回A中的私有属性
A的私有属性有两种定义方式:
1. function A(){
this._private = xxx => 开发人员协定加“_”的为私有属性,实质上是公共属性
}
2. function A(){
var _private = xxx => 完全私有属性
}
此时定义get方法,针对第一种情况为
A.prototype.getPrivateProp = function(){return this._private;}
针对第二种情况为
function A(){
var _private = xxx => 完全私有属性
this.getPrivateProp = function() {return _private;}
}
那边以上两种处理方式孰优孰劣,什么情况下使用哪种方式合适呢?还有就是我把公共方法定义在A类里和定义在A的prototype上有什么区别吗?
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiestyle21 2012-06-04
  • 打赏
  • 举报
回复
包括上面说了几点,我再举个例子。
100个人的团队,用prototype好处你就看到了。不用写一个方法就要写一次这个对象吧。最后怎么整合是不?
咸鱼boris 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

问题1,属性不能定义在原型上,否则实例化对象时,多个对象共用属性。(除非你有意为之);同理方法应该定义在原型上。
[/Quote]
你的意思是说如果我采用A.prototype.prop = 1的方式定义属性,那么

var obj1 = new A();
var obj2 = new A();
obj1.prop = 2;
alert(obj2.prop); //弹出2

对吗?
aopha 2012-06-04
  • 打赏
  • 举报
回复
问题2,都可以,情况2是闭包,在不方便使用this指针的时候多用这种方式。
aopha 2012-06-04
  • 打赏
  • 举报
回复
问题1,属性不能定义在原型上,否则实例化对象时,多个对象共用属性。(除非你有意为之);同理方法应该定义在原型上。
咸鱼boris 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
定义在protetype里, 数据和形为都是公用的。对原型的改变,同时会影响到类的实例上
直接在构造函数中定义就不会出现这种情况


虽然说把方法和字段写在构造函数中可以真正的实现private ,而在原型中只能加个“_”来说明
但javascript本就是弱类型语言,没有那些静态语言这么强的约束力和易读性,所以是不是真正实现private也无所谓,明白他是私有的就行了。

什么样的……
[/Quote]
谢谢指导,
挨踢直男 2012-06-04
  • 打赏
  • 举报
回复
定义在protetype里, 数据和形为都是公用的。对原型的改变,同时会影响到类的实例上
直接在构造函数中定义就不会出现这种情况


虽然说把方法和字段写在构造函数中可以真正的实现private ,而在原型中只能加个“_”来说明
但javascript本就是弱类型语言,没有那些静态语言这么强的约束力和易读性,所以是不是真正实现private也无所谓,明白他是私有的就行了。

什么样的用法好完全看自己的习惯

87,908

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧