<p dir="auto">problem: <a href="https://babeljs.io/repl/#?experimental=false&amp;evaluate=true&amp;loose=false&amp;spec=false&amp;code=const%20a%20%3D%20%7Bb%3A%20%7Bc%3A%20Function()%7D%7D%0Aconst%20%7Bc%7D%20%3D%20a.b%0Aconst%20d%20%3D%20%7B%0A%20%20c%20()%20%7B%0A%20%20%20%20console.log(typeof%20c)%20%2F%2F%20should%20be%20function%2C%20is%20undefined%0A%20%20%7D%0A%7D" rel="nofollow">https://babeljs.io/repl/#?experimental=false&amp;evaluate=true&amp;loose=false&amp;spec=false&amp;code=const%20a%20%3D%20%7Bb%3A%20%7Bc%3A%20Function()%7D%7D%0Aconst%20%7Bc%7D%20%3D%20a.b%0Aconst%20d%20%3D%20%7B%0A%20%20c%20()%20%7B%0A%20%20%20%20console.log(typeof%20c)%20%2F%2F%20should%20be%20function%2C%20is%20undefined%0A%20%20%7D%0A%7D</a></p>
<p dir="auto">Input code</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="const a = {b: {c: Function()}}
const {c} = a.b
const d = {
  c () {
    console.log(typeof c) // should be function, is undefined
  }
}"><pre class="notranslate"><span class="pl-k">const</span> <span class="pl-s1">a</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span><span class="pl-c1">b</span>: <span class="pl-kos">{</span><span class="pl-c1">c</span>: <span class="pl-v">Function</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">}</span><span class="pl-kos">}</span>
<span class="pl-k">const</span> <span class="pl-kos">{</span>c<span class="pl-kos">}</span> <span class="pl-c1">=</span> <span class="pl-s1">a</span><span class="pl-kos">.</span><span class="pl-c1">b</span>
<span class="pl-k">const</span> <span class="pl-s1">d</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">c</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-k">typeof</span> <span class="pl-s1">c</span><span class="pl-kos">)</span> <span class="pl-c">// should be function, is undefined</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">yields:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&quot;use strict&quot;;

var a = { b: { c: Function() } };
var _c = a.b._c; // this should be `c`, not `_c`

var d = {
  c: function c() {
    console.log(typeof _c);
  }
};
// should be function, is undefined"><pre class="notranslate"><span class="pl-s">"use strict"</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-s1">a</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span> <span class="pl-c1">b</span>: <span class="pl-kos">{</span> <span class="pl-c1">c</span>: <span class="pl-v">Function</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">}</span> <span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-k">var</span> <span class="pl-s1">_c</span> <span class="pl-c1">=</span> <span class="pl-s1">a</span><span class="pl-kos">.</span><span class="pl-c1">b</span><span class="pl-kos">.</span><span class="pl-c1">_c</span><span class="pl-kos">;</span> <span class="pl-c">// this should be `c`, not `_c`</span>

<span class="pl-k">var</span> <span class="pl-s1">d</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">c</span>: <span class="pl-k">function</span> <span class="pl-en">c</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-k">typeof</span> <span class="pl-s1">_c</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-c">// should be function, is undefined</span></pre></div>
<p dir="auto">We expect the following:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var Utils = {
  get: function() {}
};

var { get } = Utils;

var bar = {
  get: function(arg) {
    get(arg, &quot;baz&quot;);
  }
};"><pre class="notranslate"><span class="pl-k">var</span> <span class="pl-v">Utils</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">get</span>: <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span><span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-kos">{</span> get <span class="pl-kos">}</span> <span class="pl-c1">=</span> <span class="pl-v">Utils</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-s1">bar</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">get</span>: <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-s1">arg</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-en">get</span><span class="pl-kos">(</span><span class="pl-s1">arg</span><span class="pl-kos">,</span> <span class="pl-s">"baz"</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">To become:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&quot;use strict&quot;;

var Utils = {
  get: function get() {}
};

var _get = Utils.get;

var bar = {
  get: function get(arg) {
    _get(arg, &quot;baz&quot;);
  }
};"><pre class="notranslate"><span class="pl-s">"use strict"</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-v">Utils</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">get</span>: <span class="pl-k">function</span> <span class="pl-en">get</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span><span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-s1">_get</span> <span class="pl-c1">=</span> <span class="pl-v">Utils</span><span class="pl-kos">.</span><span class="pl-c1">get</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-s1">bar</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">get</span>: <span class="pl-k">function</span> <span class="pl-en">get</span><span class="pl-kos">(</span><span class="pl-s1">arg</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-s1">_get</span><span class="pl-kos">(</span><span class="pl-s1">arg</span><span class="pl-kos">,</span> <span class="pl-s">"baz"</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">But actually we get:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&quot;use strict&quot;;

var Utils = {
  get: function get() {}
};

var _get = Utils._get; // &lt;--- Note the extra underscore

var bar = {
  get: function get(arg) {
    _get(arg, &quot;baz&quot;);
  }
};"><pre class="notranslate"><span class="pl-s">"use strict"</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-v">Utils</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">get</span>: <span class="pl-k">function</span> <span class="pl-en">get</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span><span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-k">var</span> <span class="pl-s1">_get</span> <span class="pl-c1">=</span> <span class="pl-v">Utils</span><span class="pl-kos">.</span><span class="pl-c1">_get</span><span class="pl-kos">;</span> <span class="pl-c">// &lt;--- Note the extra underscore</span>

<span class="pl-k">var</span> <span class="pl-s1">bar</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
  <span class="pl-en">get</span>: <span class="pl-k">function</span> <span class="pl-en">get</span><span class="pl-kos">(</span><span class="pl-s1">arg</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-s1">_get</span><span class="pl-kos">(</span><span class="pl-s1">arg</span><span class="pl-kos">,</span> <span class="pl-s">"baz"</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">I’ve prepared a branch with failing test case:</p>
<p dir="auto"><a class="commit-link" href="https://github.com/babel/babel/compare/babel:a241300...jgwhite:2826614"><tt>babel:a241300...jgwhite:2826614</tt></a></p>
<p dir="auto">Let me know if you want a PR.</p>