The 29-year-old ran 10.61 seconds, a new Olympic record and just 0.12secs short of the world record set by the US’ Florence Griffith-Joyner in 1988.
Shericka Jackson completed a Jamaican one-two-three in Tokyo with a time of 10.76, 0.02 behind Fraser-Pryce.
Great Britain’s Daryll Neita finished eighth in 11.12.
“I have been struggling with my injury back and forth,” Thompson-Herah told BBC Sport after victory.
“I see all the bad comments. I take all of my losses, all of my defeats and I use them as my motivation.”
Neita’s GB team-mate Dina Asher-Smith failed to qualify for the final and then withdrew from the 200m after revealing she tore her hamstring earlier this month.
Fraser-Pryce, who qualified fastest for the final, found herself under pressure almost immediately from the gun as her usual whip-smart start did not fire as expected.
With the long-striding Thompson-Herah on her shoulder, Fraser-Pryce tensed up over the final 30 metres.
Thompson-Herah’s lead was comfortable enough for her to salute the clock and photographers as she crossed the line in a time that matches Griffith-Joyner’s second-fastest time.
It also sets a new Olympic record.
Thompson-Herah, who came third in the Jamaican trials earlier this year, relished her victory over her domestic rivals, with silver little consolation to a grim-faced Fraser-Pryce.
“It wasn’t the best 30 metres because I had a stumble at about the third step and I never recovered from it,” said 34-year-old Fraser-Pryce, who was aiming to be become the first woman to win three Olympic 100m titles.
“I am excited because, as a mother and at my fourth Olympics, to be able to stand again on the podium is just a tremendous honour.
“But, you know, my emotions are still very raw right now. I am sure I will go home and there will be some tears.” (Courtesy BBC)