javascript返回的函数作为对象属性

时间:2019-08-02 07:02:13

标签: javascript object fs

我正在做一个程序,其中我必须返回有关对象中文件的信息。该对象包含四个属性: 第一个属性名为birthTime:它包含文件的诞生时间(以毫秒为单位)。 第二个名为modifiedTime的属性:它包含文件被修改的时间(以毫秒为单位)。 第三个名为size的属性:其中包含文件的大小。 名为type的第4个属性,它包含文件的类型,即是文件还是目录。

我的代码是:

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
var obj = {birthTime: stats.birthtimeMs , 
    modifiedTime: stats.mtimeMs , 
    size: stats.size , 
    type: function(){if(stats.isFile()===true){return "File"}
                          else{return "Directory"}}}
    console.log(obj);
});

运行它时,我得到: { birthTime: 2019-07-16T18:00:51.674Z, modifiedTime: 2019-07-16T18:00:51.674Z, size: 327, type: [Function: type] }

如何使代码返回"File"而不是[Function: type]

4 个答案:

答案 0 :(得分:5)

删除该函数,而改用三元运算符:

type: stats.isFile() ? 'File' : 'Directory'

答案 1 :(得分:1)

使用三元组

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
    var obj = {
        birthTime: stats.birthtime , 
        modifiedTime: stats.mtime , 
        size: stats.size , 
        type: stats.isFile() ? "File" : "Directory"
    };
    console.log(obj);
});

使用IIFE

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
    var obj = {
        birthTime: stats.birthtime , 
        modifiedTime: stats.mtime , 
        size: stats.size , 
        type: (function(){
            if(stats.isFile()) {
                return "File";
            } else {
                return "Directory";
            }
        })()
    };
    console.log(obj);
});

在其他地方声明该函数并调用它

function checkType(stats) {
    return stats.isFile() ? "File" : "Directory";
}

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
    var obj = {
        birthTime: stats.birthtime , 
        modifiedTime: stats.mtime , 
        size: stats.size , 
        type: checkType(stats)
    };
    console.log(obj);
});

计算变量值并将其存储

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
    var type = stats.isFile() ? "File" : "Directory";
    var obj = {
        birthTime: stats.birthtime , 
        modifiedTime: stats.mtime , 
        size: stats.size , 
        type: type 
    };
    console.log(obj);
});

答案 2 :(得分:1)

将其设为IIFE(立即调用函数表达式)

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
var obj = {birthTime: stats.birthtime , 
modifiedTime: stats.mtime , 
size: stats.size , 
type: (function(){if(stats.isFile()===true){return "File"}
                      else{return "Directory"}}})()
console.log(obj);
});

尝试使用ternary运算符

const fs = require("fs");
fs.stat("./fs1.js", function(err, stats){
var obj = {birthTime: stats.birthtime , 
modifiedTime: stats.mtime , 
size: stats.size , 
type: stats.isFile()?"File":"Directory",
console.log(obj);
});

答案 3 :(得分:1)

使用此:

type: stats.isFile() ? 'File' : 'Directory'