论坛首页 Web前端技术论坛

js创建对象的几种常用方式

浏览 11463 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-06-25  
人为的制造复杂,其实原理很简单,js的滞后绑定而已。
不过推荐用混合,包括继承也是!
0 请登录后投票
   发表时间:2010-06-25  
你看的哪本书我去年时就买了  现在还没看  最近才开始研究对象的问题 惭愧啊
第三种我见的比较多  第四种我是没见过 
0 请登录后投票
   发表时间:2010-06-25   最后修改:2010-06-25
额,一样,哈哈,我家里已经堆了N本书了,基本上买来就放那一直没看了,最近才开始整理出来,翻翻
0 请登录后投票
   发表时间: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返回
0 请登录后投票
   发表时间:2010-06-28  
好东西。。。
0 请登录后投票
   发表时间: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中并没有类这个概念)
0 请登录后投票
   发表时间: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个引用指向一个对象也太浪费了。一个就够了
0 请登录后投票
   发表时间:2010-06-29   最后修改:2010-06-29
没说是错的啊
我错了,哥哥
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics