Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象方法中通过外部方法设置变量_Javascript_Object_Methods - Fatal编程技术网

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

Javascript 在对象方法中通过外部方法设置变量,javascript,object,methods,Javascript,Object,Methods,我使用javascript对象的方法创建HTML来编写该对象。 在该方法中,我有一个日期(以字符串格式作为SQL日期),我在外部方法中将其格式化为dd MMM yyy。外部方法可以很好地返回我需要的字符串,但是当我在对象的方法中设置变量时,它返回为undefined 现将有关守则修订如下: function CreateReview(reviewID, visitDate) { var reviewObject = { iD: reviewID, visi

我使用javascript对象的方法创建HTML来编写该对象。 在该方法中,我有一个日期(以字符串格式作为SQL日期),我在外部方法中将其格式化为dd MMM yyy。外部方法可以很好地返回我需要的字符串,但是当我在对象的方法中设置变量时,它返回为
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;

    });
}
而在
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
调用返回
undefined
,而控制台没有返回?

函数getFormattedDate()
中,您有

var result = input.replace(pattern, function(match,p1,p2,p3) {... return date; });
因此
result
包含
replace
函数的返回值,但是
getFormattedDate
CreateReview
调用时不会返回任何==>未定义的内容

添加
返回结果
在函数的末尾
getFormattedDate

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