简体   繁体   English

返回值返回为未定义

[英]Return value is coming back as undefined

I am trying to write a script for Illustrator that will read the color i need from the object and then fill the template with that color where it is needed. 我正在尝试为Illustrator编写脚本,该脚本将从对象读取我需要的颜色,然后在需要的位置用该颜色填充模板。 it keeps returning as undefined. 它不断返回未定义状态。 I am pretty new to Javascript any ideas what I am doing wrong? 我是Java新手,有什么想法我做错了吗?

i have tried returning as newCMYKColor[stockColor] , newCMYKColor[stockColors] and returning stockColor[newCMYKColor] 我尝试过以newCMYKColor[stockColor]newCMYKColor[stockColors]返回并返回stockColor[newCMYKColor]

convertRoofColorToCMYK = function(stockColor) {
  var newCMYKColor = new CMYKColor(),
    stockColors = {
      BlackPoly: [80, 72, 68, 100],
      LightBlue: [100, 43, 0, 30],
      DarkBluePoly: [95, 74, 7, 44],
      PurplePoly: [82, 98, 0, 12],
      GreenPoly: [90, 12, 95, 40],
      YellowPoly: [0, 19, 89, 0],
      EcruPoly: [6, 13, 41, 4],
      OrangePoly: [0, 73, 98, 0],
      RedPoly: [7, 100, 82, 26],
      GreyPoly: [10, 4, 4, 14],
      WhitePoly: [0, 0, 0, 0]
    };
  try {
    newCMYKColor.cyan = stockColors[stockColor][0];
    newCMYKColor.magenta = stockColors[stockColor][1];
    newCMYKColor.yellow = stockColors[stockColor][2];
    newCMYKColor.black = stockColors[stockColor][3];
  } catch (e) {
    newCMYKColor.cyan = 0;
    newCMYKColor.magenta = 0;
    newCMYKColor.yellow = 0;
    newCMYKColor.black = 0;
  }
  return newCMYKColor;
};

roofColorCMYK = convertRoofColorToCMYK(Clipboard.roof_color);

if (!roofColorCMYK == undefined) {
  if (app.activeDocument.Layers["Tent Pieces"] &&
    app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"]) {
    for (i = 0; i < app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"].pathItems.length; i++) {
      app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"].pathItems[i].fillColor = roofColorCMYK;
    } else {
      alert("sorry we are not able to fill the tent roof with the " +
        Clipboard.roof_color + " color.")
    }

before I added the else/if statement, it was telling me undefined at if (app.activeDocument.Layers["Tent Pieces"] && app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"]) . 在我添加else / if语句之前,它告诉我if (app.activeDocument.Layers["Tent Pieces"] && app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"])未定义if (app.activeDocument.Layers["Tent Pieces"] && app.activeDocument.Layers["Tent Pieces"].Layers["Roof Composite"]) After adding the else/if statement, it is giving me the alert every time. 添加else / if语句后,每次都会给我警报。

Please take a look at MDN specification for try catch block. 请查看MDN规范以获取try catch块。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch . https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/try...catch

You have to remember that no code will be executed after a try catch block. 您必须记住,try catch块之后将不执行任何代码。

I suggest you to change your code this way : 我建议您以这种方式更改代码:

try {
    newCMYKColor.cyan = stockColors[stockColor][0];
    newCMYKColor.magenta = stockColors[stockColor][1];
    newCMYKColor.yellow = stockColors[stockColor][2];
    newCMYKColor.black = stockColors[stockColor][3];

    return newCMYKColor;
  } catch (e) {
    newCMYKColor.cyan = 0;
    newCMYKColor.magenta = 0;
    newCMYKColor.yellow = 0;
    newCMYKColor.black = 0;

    return newCMYKColor;
  }

or use a finally block at the end (code inside finally is always executed what ever happens before). 或在末尾使用finally块(finally内部的代码始终会执行之前发生的一切)。

try {
    newCMYKColor.cyan = stockColors[stockColor][0];
    newCMYKColor.magenta = stockColors[stockColor][1];
    newCMYKColor.yellow = stockColors[stockColor][2];
    newCMYKColor.black = stockColors[stockColor][3];
  } catch (e) {
    newCMYKColor.cyan = 0;
    newCMYKColor.magenta = 0;
    newCMYKColor.yellow = 0;
    newCMYKColor.black = 0;
  } finaly {
    return newCMYKColor;
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM