在对象的方法中通过外部方法设置变量

Setting variable through external method in method of object

本文关键字:方法 外部 设置 变量 对象      更新时间:2023-09-26

我使用javascript对象的方法来创建HTML来编写该对象。在该方法中,我有一个日期(以SQL date的字符串格式),我将其格式化为在外部方法中添加MMM YYYY。外部方法可以很好地返回我需要的字符串,但是当我在对象的方法中设置变量时,它返回为undefined

相应代码:

function CreateReview(reviewID, visitDate) {
    var reviewObject = {
        iD: reviewID,
        visitDate: visitDate, 
        CreateReviewObject : function(c) {
            var reviewContainer = document.createElement('div');
            reviewContainer.id = 'Review_' + this.iD;
            reviewContainer.className  = 'Card Review';
            var headerDIV = document.createElement('div');
            headerDIV.className  = 'Header';
            var dateTagsDIV = document.createElement('div');
            dateTagsDIV.className  = 'DateTags';
            var datesDIV = document.createElement('div');
            datesDIV.className  = 'Dates';
            var formattedVisitDate = getFormattedDate(this.visitDate);
            console.log(formattedVisitDate);
            var dateDIV = document.createElement('div');
            dateDIV.className  = 'Date';
            dateDIV.innerHTML = formattedVisitDate;
            datesDIV.appendChild(dateDIV);
            dateTagsDIV.appendChild(datesDIV);
            headerDIV.appendChild(dateTagsDIV);
            reviewContainer.appendChild(headerDIV);
            return reviewContainer;
        }
    };
    return reviewObject;
}
function getFormattedDate(input) {
    input = input.replace(/-/g,'/');
    var pattern = /(.*?)'/(.*?)'/(.*?)$/;
    var result = input.replace(pattern,function(match,p1,p2,p3){
        p2 = parseInt(p2);
        p3 = parseInt(p3);
        var months = ['jan','feb','maa','apr','mei','jun','jul','aug','sep','okt','nov','dec'];
        var date = (p3<10?"0"+p3:p3) + " " + months[parseInt(p2-1)] + " " + p1;
        console.log(date);
        return date;
    });
}

getFormattedDate中控制台的输出则为

12 mei 2015

而在CreateReview中为

undefined

我也试过下面的方法:

function CreateReview(reviewID, restaurant, kitchenTypes, tags, pictures, ratings, thumbPicture, visitDate, introduction, description) {
    var reviewObject = {
        iD: reviewID,
        visitDate: visitDate, 
        CreateReviewObject : function(c) {
            var getFormattedVisitDate = function(visitDate) {
              return function() { getFormattedDate(visitDate); };
            };
            var reviewContainer = document.createElement('div');
            reviewContainer.id = 'Review_' + this.iD;
            reviewContainer.className  = 'Card Review';
            var headerDIV = document.createElement('div');
            headerDIV.className  = 'Header';
            var dateTagsDIV = document.createElement('div');
            dateTagsDIV.className  = 'DateTags';
            var datesDIV = document.createElement('div');
            datesDIV.className  = 'Dates';
            var formattedVisitDate = getFormattedVisitDate(this.visitDate);
            console.log(formattedVisitDate);
            var dateDIV = document.createElement('div');
            dateDIV.className  = 'Date';
            dateDIV.innerHTML = formattedVisitDate;
            datesDIV.appendChild(dateDIV);
            dateTagsDIV.appendChild(datesDIV);
            headerDIV.appendChild(dateTagsDIV);
            reviewContainer.appendChild(headerDIV);
            return reviewContainer;
        }
    };
    return reviewObject;
}
function getFormattedDate(input) {
    input = input.replace(/-/g,'/');
    var pattern = /(.*?)'/(.*?)'/(.*?)$/;
    var result = input.replace(pattern,function(match,p1,p2,p3){
        p2 = parseInt(p2);
        p3 = parseInt(p3);
        var months = ['jan','feb','maa','apr','mei','jun','jul','aug','sep','okt','nov','dec'];
        var date = (p3<10?"0"+p3:p3) + " " + months[parseInt(p2-1)] + " " + p1;
        console.log(date);
        return date;
    });
}

这给了我在CreateReview中的输出:

return function() { getFormattedDate(visitDate); };

为什么CreateReview调用返回undefined,而控制台不返回?

在您的function getFormattedDate()中,您有

var result = input.replace(pattern, function(match,p1,p2,p3) {... return date; });

所以result包含replace函数的返回值,但getFormattedDate在从CreateReview调用时不返回任何值==> undefined

在函数getFormattedDate的末尾添加return result;