锁定老帖子 主题:js创建对象的几种常用方式
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-25
人为的制造复杂,其实原理很简单,js的滞后绑定而已。
不过推荐用混合,包括继承也是! |
|
返回顶楼 | |
发表时间:2010-06-25
你看的哪本书我去年时就买了 现在还没看 最近才开始研究对象的问题 惭愧啊
第三种我见的比较多 第四种我是没见过 |
|
返回顶楼 | |
发表时间:2010-06-25
最后修改:2010-06-25
额,一样,哈哈,我家里已经堆了N本书了,基本上买来就放那一直没看了,最近才开始整理出来,翻翻
|
|
返回顶楼 | |
发表时间:2010-06-26
select*from爱 写道 luolonghao 写道 我喜欢第一种,想知道不推荐的理由。
------ function lev(){ return "啊打"; } function Parent(){ return { name : '李小龙', age : 30, lev : lev }; } function Child(){ var obj = Parent(); obj.name = '李小龙儿子'; obj.age = 1; return obj; } var x = Parent(); alert(x.name); alert(x.lev()); var y = Child(); alert(y.name); alert(y.lev()); 我选择的理由 ---- 1. 不用new,方便链式操作。 2. 没有模拟class的代码。 3. 用闭包可以模拟私有方法和变量。 。。。你把 我的代码貌似不是这样写的,不推荐的原因是因为,以你贴出来的代码为例。当创建多个对象的实例时,会照成 Parent的重复创建,每多实例化一次,就多了一个parent版本,当然,使用这种模式也有其优点,具体看应用场景 比如以下代码 var y=Child(); var y2=Child(); y3=Child(); 这样Parent被重复创建了3次 这样的重复创建并不是类级别的创建,而是对象(因为不涉及到prototype)。很符合OO的思想。在很多开源框架中,这种构造方法被广泛运用。但是一般用于工厂模式的比较多 比如 addEventListener = function() { if (window.addEventListener) { return function(target, type, fn) { target.addEventListener(type, fn, false); }; } else { return function(target, type, fn) { target.attachEvent('on' + type, function() {fn.call(target);}); } } } 这段代码在调用的时候,已经不用判断是何浏览器了。在初始化的时候已经把function返回 |
|
返回顶楼 | |
发表时间:2010-06-28
好东西。。。
|
|
返回顶楼 | |
发表时间:2010-06-28
rainsilence 写道 select*from爱 写道 luolonghao 写道 我喜欢第一种,想知道不推荐的理由。
------ function lev(){ return "啊打"; } function Parent(){ return { name : '李小龙', age : 30, lev : lev }; } function Child(){ var obj = Parent(); obj.name = '李小龙儿子'; obj.age = 1; return obj; } var x = Parent(); alert(x.name); alert(x.lev()); var y = Child(); alert(y.name); alert(y.lev()); 我选择的理由 ---- 1. 不用new,方便链式操作。 2. 没有模拟class的代码。 3. 用闭包可以模拟私有方法和变量。 。。。你把 我的代码貌似不是这样写的,不推荐的原因是因为,以你贴出来的代码为例。当创建多个对象的实例时,会照成 Parent的重复创建,每多实例化一次,就多了一个parent版本,当然,使用这种模式也有其优点,具体看应用场景 比如以下代码 var y=Child(); var y2=Child(); y3=Child(); 这样Parent被重复创建了3次 这样的重复创建并不是类级别的创建,而是对象(因为不涉及到prototype)。很符合OO的思想。在很多开源框架中,这种构造方法被广泛运用。但是一般用于工厂模式的比较多 比如 addEventListener = function() { if (window.addEventListener) { return function(target, type, fn) { target.addEventListener(type, fn, false); }; } else { return function(target, type, fn) { target.attachEvent('on' + type, function() {fn.call(target);}); } } } 这段代码在调用的时候,已经不用判断是何浏览器了。在初始化的时候已经把function返回 这样做是可以,不过要看应用场景,比如你以上代码是包含在 一个 function test(){}中,而在调用的使用 以new test()的形式时,在多次 new test的时候,function就写到外面好一点,在内部引用即可,而如果不是 以'类的'形式调用,就无所谓了(js中并没有类这个概念) |
|
返回顶楼 | |
发表时间:2010-06-28
select*from爱 写道 rainsilence 写道 select*from爱 写道 luolonghao 写道 我喜欢第一种,想知道不推荐的理由。
------ function lev(){ return "啊打"; } function Parent(){ return { name : '李小龙', age : 30, lev : lev }; } function Child(){ var obj = Parent(); obj.name = '李小龙儿子'; obj.age = 1; return obj; } var x = Parent(); alert(x.name); alert(x.lev()); var y = Child(); alert(y.name); alert(y.lev()); 我选择的理由 ---- 1. 不用new,方便链式操作。 2. 没有模拟class的代码。 3. 用闭包可以模拟私有方法和变量。 。。。你把 我的代码貌似不是这样写的,不推荐的原因是因为,以你贴出来的代码为例。当创建多个对象的实例时,会照成 Parent的重复创建,每多实例化一次,就多了一个parent版本,当然,使用这种模式也有其优点,具体看应用场景 比如以下代码 var y=Child(); var y2=Child(); y3=Child(); 这样Parent被重复创建了3次 这样的重复创建并不是类级别的创建,而是对象(因为不涉及到prototype)。很符合OO的思想。在很多开源框架中,这种构造方法被广泛运用。但是一般用于工厂模式的比较多 比如 addEventListener = function() { if (window.addEventListener) { return function(target, type, fn) { target.addEventListener(type, fn, false); }; } else { return function(target, type, fn) { target.attachEvent('on' + type, function() {fn.call(target);}); } } } 这段代码在调用的时候,已经不用判断是何浏览器了。在初始化的时候已经把function返回 这样做是可以,不过要看应用场景,比如你以上代码是包含在 一个 function test(){}中,而在调用的使用 以new test()的形式时,在多次 new test的时候,function就写到外面好一点,在内部引用即可,而如果不是 以'类的'形式调用,就无所谓了(js中并没有类这个概念) 【var y=Child(); var y2=Child(); y3=Child(); 这样Parent被重复创建了3次 】 这样难道不对吗?难道y,y2,y3中属性是共享的?那用3个引用指向一个对象也太浪费了。一个就够了 |
|
返回顶楼 | |
发表时间:2010-06-29
最后修改:2010-06-29
没说是错的啊
我错了,哥哥 |
|
返回顶楼 | |