From 0178f4ed3187dff439ed3097c8c89555b2a6749f Mon Sep 17 00:00:00 2001 From: ygj6 <7699524+ygj6@users.noreply.github.com> Date: Mon, 6 Sep 2021 05:35:13 +0800 Subject: [PATCH] fix(ref-transform): not transform the prototype attributes. (#4503) fix #4502 --- packages/ref-transform/__tests__/refTransform.spec.ts | 8 ++++++++ packages/ref-transform/src/refTransform.ts | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/ref-transform/__tests__/refTransform.spec.ts b/packages/ref-transform/__tests__/refTransform.spec.ts index b4b3473741c..1b9f3003bfb 100644 --- a/packages/ref-transform/__tests__/refTransform.spec.ts +++ b/packages/ref-transform/__tests__/refTransform.spec.ts @@ -395,4 +395,12 @@ describe('errors', () => { `$computed can only be used as the initializer` ) }) + + test('not transform the prototype attributes', () => { + const { code } = transform(` + const hasOwnProperty = Object.prototype.hasOwnProperty + const hasOwn = (val, key) => hasOwnProperty.call(val, key) + `) + expect(code).not.toMatch('.value') + }) }) diff --git a/packages/ref-transform/src/refTransform.ts b/packages/ref-transform/src/refTransform.ts index 7fae8562e0c..bfed7311b84 100644 --- a/packages/ref-transform/src/refTransform.ts +++ b/packages/ref-transform/src/refTransform.ts @@ -20,7 +20,7 @@ import { walkFunctionParams } from '@vue/compiler-core' import { parse, ParserPlugin } from '@babel/parser' -import { babelParserDefaultPlugins } from '@vue/shared' +import { babelParserDefaultPlugins, hasOwn } from '@vue/shared' const TO_VAR_SYMBOL = '$' const TO_REF_SYMBOL = '$$' @@ -309,7 +309,7 @@ export function transformAST( parent: Node, parentStack: Node[] ): boolean { - if (id.name in scope) { + if (hasOwn(scope, id.name)) { if (scope[id.name]) { if (isStaticProperty(parent) && parent.shorthand) { // let binding used in a property shorthand