首页 > 试题广场 >

模块

[编程题]模块
  • 热度指数:95052 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
完成函数 createModule,调用之后满足如下要求:
1、返回一个对象
2、对象的 greeting 属性值等于 str1, name 属性值等于 str2
3、对象存在一个 sayIt 方法,该方法返回的字符串为 greeting属性值 + ', ' + name属性值
推荐
声明对象有两种常见的方式:var obj = {};和var obj = new Object();。前面一种可以直接在括号中以key:value的方式定义属性,后一种采用点运算符给对象添加属性。
function createModule(str1, str2) {
     var obj = {
         greeting : str1,
         name     : str2,
         sayIt    : function(){
             //两个属性前面都需要加上this
             return this.greeting+", "+this.name;
         }
     };
     return obj;
 }

编辑于 2015-12-04 19:42:03 回复(18)
function createModule(str1, str2) {
    var a = {}
    a.greeting = str1
    a.name = str2
    a.sayIt = () =>{
        return a.greeting+', '+a.name
    }
    return a
}
发表于 2021-09-14 10:28:59 回复(0)
function createModule(str1, str2) {
   let r = {
       greeting:str1,
       name:str2,
       sayIt(){
           return this.greeting + ', ' + this.name;
       }
   }
   return r;
}

发表于 2021-08-10 19:43:10 回复(0)
function createModule(str1, str2) {
    var res = {
        greeting: str1,
        name: str2,
        sayIt: function(){
            return this.greeting + ", " + this.name;
        }
    }
    return res;
}

发表于 2020-03-25 16:19:39 回复(0)
function createModule(str1, str2) {
	var obj = {
        "greeting":str1,
        "name":str2,
        "sayIt":function(){return this.greeting+', '+this.name;}
    }
    return obj;
}

测试通过!

发表于 2017-04-10 16:29:48 回复(0)
原型模式:
function createModule(str1, str2) {
	function Obj()
    {
        this.greeting = str1;
        this.name = str2;
    }
    Obj.prototype.sayIt = function(){return this.greeting + ", " + this.name;}
    return new Obj();  
}
构造函数模式:
function createModule(str1, str2) {
    function Obj()
    {
        this.greeting = str1;
        this.name = str2;
        this.sayIt = function(){return this.greeting + ", " + this.name;}
    }
    return new Obj();    
}
创建对象模式:
function createModule(str1, str2) {
    function CreateObj()
    {
        obj = new Object;
        obj.greeting = str1;
        obj.name = str2;
        obj.sayIt = function(){return this.greeting + ", " + this.name;}
        return obj;
    }
    return CreateObj();    
}
字面量模式:
function createModule(str1, str2) {
    var obj =
            {
                greeting : str1,
                name : str2,
                sayIt : function(){return this.greeting + ", " + this.name;}
            };
    return obj;    
}

编辑于 2016-10-12 16:35:39 回复(12)
注意这里的逗号后面有一个空格~
发表于 2015-07-21 14:34:03 回复(21)
//使用构造函数法
function createModule(str1, str2) {
	function Obj(){
        this.greeting = str1;
        this.name = str2;
        this.sayIt = function(){
            return this.greeting + ', ' + this.name;
        };
    }
    return new Obj();
}
//构造函数与原型组合
function createModule(str1, str2) {
	function CreateMod(){
        this.greeting = str1;
        this.name = str2;
    }
    CreateMod.prototype.sayIt = function(){
        return this.greeting + ', '  + this.name;
    }
    return new CreateMod();
}

发表于 2015-10-19 19:50:15 回复(0)
整一堆花里胡哨,原型模式都出来了,还有用new Object的,还有先套个函数,再执行函数的,简直是脱裤子放屁多此一举,总之各种花式炫技。例如这个
function createModule(str1, str2) {
    function Obj()
    {
        this.greeting = str1;
        this.name = str2;
    }
    Obj.prototype.sayIt = function(){return this.greeting + ", " + this.name;}
    return new Obj();  
}
实现类干啥玩意呢,非得在原型链上多加一层,请问Obj函数对封装模块有什么好处吗,还有这个
function createModule(str1, str2) {
    function CreateObj()
    {
        obj = new Object;
        obj.greeting = str1;
        obj.name = str2;
        obj.sayIt = function(){return this.greeting + ", " + this.name;}
        return obj;
    }
    return CreateObj();    
}
还非得自己又整个函数,请问这个函数有可复用的机会吗,new Object干啥呢,非得一个个添加属性。另外变量还用隐式全局声明,真的是把es5及其之前的糟粕学得透透的。最可笑还有这个
function createModule(str1, str2) {
    var P =
        {
            greeting : str1,
            name : str2,
            sayIt : function(){return this.greeting + ", " + this.name;}
        };
    var p = Object.create(P);
    return p;
}
如果说new object和字面量只是习惯问题的话,那这哥们的做法我真是看不懂。新建了个对象p,原型指向了P,真的是笑死我了,p对象本身啥属性也没有,访问还得靠原型链查找P,你要上天啊,关键这哥们还信誓旦旦说创建对象只有两种方式,构造函数和这个。。。你学岔劈了吧,你要说用这两方式来模拟实现类还靠点谱
看到你们部分人的回答以及评论,我对未来的面试真是信心大增

发表于 2020-08-06 17:10:50 回复(4)
function createModule(str1, str2) {
 var obj = {
        greeting:str1,
        name:str2,
        sayIt:function(){
            return this.greeting+', '+this.name;
        }
    }
    return obj;
}

发表于 2015-08-25 16:18:42 回复(0)
这个空格,要不是看讨论,完全不知道错在哪里啊?这要真正考试不是被坑死?
发表于 2016-08-12 21:59:39 回复(0)
逗号后面有空格 贼特么坑
发表于 2019-05-20 15:11:08 回复(1)
sayIt? saylt 写成saylt 死活不能通过测试。。。

发表于 2017-07-15 12:04:34 回复(1)
新建对象,从本质上来说,只有两种方法,一种是new一个构造函数,一种是Object.creat()。添加对象的属性有很多种方法,可以再原型链上添加,可以再构造函数种添加,可以再第二种方法的原型对象上添加。
编辑于 2018-04-01 15:44:52 回复(3)
function createModule(str1, str2) {
    var greeting = str1;
    var name = str2;
    function sayIt(){
        return this.greeting +", "+ this.name;
    }
    return {
        greeting: greeting,
        name: name,
        sayIt: sayIt
    }
}
模块的实现就是利用闭包,要实现模块模式必须具备两个条件:
1.必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)
var foo = coolModule('Hello', 'World!');
2.封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态.
foo.sayIt()
//    Hello, World!

发表于 2017-05-30 14:30:40 回复(1)
function createModule(str1, str2) {
    var obj = new Object();
    obj.greeting=str1;
    obj.name=str2;
    obj.sayIt = function(){return this.greeting+', '+this.name;};
    return obj;
}
那个空格真是坑爹啊
发表于 2015-07-24 10:06:47 回复(3)
function createModule(str1, str2) {
	return {
        greeting : str1,
        name : str2,
        sayIt : function (){
            return this.greeting + ', ' + this.name;
        }
    }
}
注意,逗号后面有个空格。
发表于 2015-07-13 20:17:38 回复(1)
简洁明了
function createModule(str1, str2) {
     return {
           greeting:str1,
           name:str2,
           sayIt:function(){
              return this.greeting + ', ' + this.name
          }
     }
}
发表于 2022-11-15 22:00:44 回复(0)
这个函数是sayIt,这是爱不是凹
发表于 2022-11-01 20:04:37 回复(0)
function createModule(str1, str2) {
    return {
        greeting:str1,
        name:str2,
        sayIt:function (){
            return this.greeting+', '+this.name;
        }
    }
}

发表于 2018-03-31 22:13:36 回复(0)
return {
    greeting:str1,
    name:str2,
    sayIt(){
        return this.greeting + ', ' + this.name
    }
}

编辑于 2024-03-24 23:49:54 回复(0)

问题信息

难度:
150条回答 17368浏览

热门推荐

通过挑战的用户

查看代码