2016-01-24 39 views
0

我试图重构我写为了一个谷歌的AdWords脚本的一部分不必重复声明,如果我希望我可以通过的“本”的实例动态更新。但是,我收到“无法在对象firstKeywords中找到函数推送(第34行)”错误。当我简单地插入“firstKeywords.push”而不是“this.keywordsArray.push”时,脚本就起作用了。想知道是否有办法将“this”实例视为一个数组,或者是否有其他解决方法?推到这个解决方法

Error: this.keywordsArray.push 

非工作脚本:

var firstKeywords = []; 
var secondKeywords = []; 
var thirdKeywords = []; 

function main() { 
    function testKeywords(adgr, keywordsArray) { 
    this.adgr = adgr; 
    this.keywordsArray = keywordsArray; 
} 


testKeywords.prototype.move = function() { 
    var campaignIterator = AdWordsApp.campaigns() 
     .withCondition("Status = ENABLED") 
     .withCondition("Name CONTAINS_IGNORE_CASE 'High'") 
     .get(); 
    while (campaignIterator.hasNext()) { 
     var campaign = campaignIterator.next(); 

    var adGroupIterator = campaign.adGroups() 
     .withCondition("Name CONTAINS_IGNORE_CASE 'Blogs'") 
     .get(); 
    while (adGroupIterator.hasNext()) { 
     var adGroup = adGroupIterator.next(); 
     var adGroupName = adGroup.getName(); 
    var keywordIterator = adGroup.keywords() 
     .withCondition("SystemServingStatus = RARELY_SERVED") 
     .get(); 
    while (keywordIterator.hasNext()) { 
     var keyword = keywordIterator.next(); 
     var keywordText = keyword.getText(); 
     var adgroupArray = this.keywordsArray; 
     if (adGroupName === this.adgr) { 
      this.keywordsArray.push(keywordText); 
      keyword.pause(); 
     } 
    } 
    } 
    } 
} 

var test01 = new testKeywords("General Music Blogs", "firstKeywords"); 
var test02 = new testKeywords("Hip Hop Music Blogs", "secondKeywords"); 
var test03 = new testKeywords("Indie Music Blogs", "thirdKeywords"); 

test01.move(); 
test02.move(); 
test03.move(); 
} 

下面的脚本工作的正确方法,但与if语句重复。

var firstKeywords = []; 
var secondKeywords = []; 
var thirdKeywords = []; 

function main() { 
    function testKeywords() { 
    var campaignIterator = AdWordsApp.campaigns() 
     .withCondition("Status = ENABLED") 
     .withCondition("Name CONTAINS_IGNORE_CASE 'High'") 
     .get(); 
    while (campaignIterator.hasNext()) { 
     var campaign = campaignIterator.next(); 

    var adGroupIterator = campaign.adGroups() 
     .withCondition("Name CONTAINS_IGNORE_CASE 'Blogs'") 
     .get(); 
    while (adGroupIterator.hasNext()) { 
     var adGroup = adGroupIterator.next(); 
     var adGroupName = adGroup.getName(); 
    var keywordIterator = adGroup.keywords() 
     .withCondition("SystemServingStatus = RARELY_SERVED") 
     .get(); 
    while (keywordIterator.hasNext()) { 
     var keyword = keywordIterator.next(); 
     var keywordText = keyword.getText() 
     if (adGroupName === 'General Music Blogs') { 
      firstKeywords.push(keywordText); 
      keyword.pause(); 
     } 
     if (adGroupName === 'Hip Hop Music Blogs') { 
      secondKeywords.push(keywordText); 
      keyword.pause(); 
     } 
     if (adGroupName === 'Indie Music Blogs') { 
      thirdKeywords.push(keywordText); 
      keyword.pause(); 
     } 
     } 
     } 
    } 
} 
} 

在此先感谢。

回答

0

在你testKeyword你逝去的string文字,而不是object裁判。

因此改变

var test01 = new testKeywords("General Music Blogs", "firstKeywords"); 
var test02 = new testKeywords("Hip Hop Music Blogs", "secondKeywords"); 
var test03 = new testKeywords("Indie Music Blogs", "thirdKeywords"); 

var test01 = new testKeywords("General Music Blogs", firstKeywords); 
var test02 = new testKeywords("Hip Hop Music Blogs", secondKeywords); 
var test03 = new testKeywords("Indie Music Blogs", thirdKeywords); 
+0

啊,可以发誓我试过了,这解决了吧!非常感谢你! – fakewalls

+0

@fakewalls请upvote并接受答案。谢谢 – mani