首页 > 解决方案 > Javascript - 对象构造和利用 - 深入了解

问题描述

有人可以告诉我:

  1. 如何根据不同的开发场景选择对象构造?

  2. 与另一种模式相比,到目前为止,哪种模式对开发来说是一个好的模式?

  3. 如果你有机会为银行/社交网络/在线购买(如亚马逊、eBay)等开发一个完整的项目,你会使用哪一个,为什么。?

这只是为了从底层获得足够的理解。

1.对象构造函数:

var person = new Object();
person.name = "Demo name",
person.getName = function(){
  return this.name ; 
};

使用 Object.create() 方法: var a = Object.create(null);

2.文字构造函数:

var person = { 
  name : "Demo name",
  getName : function (){
   return this.name
  } 
} 

3.函数构造函数:

function Person(name){
  this.name = name
  this.getName = function(){
    return this.name
  } 
} 

4. 原型:

function Person(){};
Person.prototype.name = "Demo name";

5.功能/原型组合:

function Person(name){
  this.name = name;
} 
Person.prototype.getName = function(){
  return this.name
} 

6.单身人士:

var person = new function(){
  this.name = "Demo name"
} 

标签: javascripttypescriptoopobject

解决方案


  1. 是不行的。它对文字没有任何好处,只是速度较慢且可读性较差。

  2. 永远是一个不错的选择。

    const user = { name: "Jonas", session: 1234 };
    
  3. 应该使用而不是 2. 如果您在设置对象时有其他逻辑(例如,如果创建了用户,则为他生成会话),或者如果您必须在多个位置创建某个对象。但是我不赞成new运营商,我会这样做:

    function createUser(name) {
      return { name, session: createSession() }
    }
    
    function logout(user) {
     user.session = undefined;
    }
    
    
  4. 不确定应该是什么,在原型上拥有属性很少有意义。

  5. 如果您支持 OOP,这是一个不错的选择,但是现在我会使用该class语法,使其更易于阅读(尤其是对于其他语言的程序员)。通过将方法移动到原型中,它们可以在实例之间共享,如果创建了大量实例,这将减少内存和性能成本。

    class User {
      constructor(name) {
        this.name = name;
      }
      login() {
        this.session = 1234;
      }
    }
    
  6. 毫无意义,选择 1. 代替


推荐阅读