关于javascript:分配对象及其原型方法

assign object and it's method to prototype

本问题已经有最佳答案,请猛点这里访问。

我想把对象和它的方法赋给原型,我的正常条件是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var Page = function (){
    _page = {
        id: 1,
        getValue : function (){

        },

        UI :  {
            display : function (){
                console.log('display layout');
            }
        }
    }
    return _page;
}    

var mypage = new Page()
mypage.UI.display();

在我的情况下,页面类的实例很多,所以我想用原型初始化UI对象,这样UI和它的方法就可以共享给所有页面实例。为了实现这一点,我可以使用EDCOX1〔0〕如下,

1
2
3
4
5
_page.__proto__.UI =  {
    display : function (){
        console.log('display layout');
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var Page = function (){
    _page = {
        id: 1,
        getValue : function (){
       
        }
       
    }
   
    _page.__proto__.UI =  {
        display : function (){
            console.log('display layout');
        }
    }
    return _page;
}    

var mypage = new Page()
mypage.UI.display();

但是这个__proto__是不赞成的,所以有没有更好的方法可以实现这个目标?

不需要用原型初始化UI,我们可以正常使用它,不管有多少页面实例,这会影响性能吗?


这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
function Page (){
    this.id = 1;
}    

Page.prototype.getValue = function (){

};

Page.prototype.UI = {
    display : function (){
        console.log('display layout');
    }
};

重要的是,在构造函数中,您不需要return,而是将对象的属性分配给this,因为这是Page的真实实例。这将使使用prototype链成为可能。


您应该为此使用另一个类模式,例如:

1
2
3
4
5
6
7
8
9
10
var Page = (function(glob) {
  function Page() {
     this.id = 1;
  }

  Page.prototype.method = function() {
    // ...
  }
  return Page;
}(window))