首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置属性隐藏

配置属性隐藏
EN

Stack Overflow用户
提问于 2013-06-24 03:06:27
回答 3查看 249关注 0票数 0

开始在JavaScript中使用已配置的对象时,有些东西给我带来了一些问题。

看看这段代码:

代码语言:javascript
复制
function Monster() {
}

function Animal() {
  Object.defineProperty(this, "name", {
    set: function(n) {  },
    get: function() { return "Jim"; } // hard-coded to demonstrate problem
  });
}

Monster.prototype = new Animal();

var monster = new Monster();
monster.name = "John";
monster.name // Still returns Jim. I need to assign the property to THIS object, so Jim is shadowed by John.

正如注释所说,这是输出"Jim",因为getter是硬编码返回的。

我不想每次调用monster.name时都改变我的原型-我想在我的怪物实例上有一个新的阴影属性。我怎么能做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-24 04:50:26

使属性可配置:

代码语言:javascript
复制
function Animal() {
  Object.defineProperty(this, "name", {
    configurable: true,
    set: function(n) {  },
    get: function() { return "Jim"; } // hard-coded to demonstrate problem
  });
}

Monster.prototype = new Animal();

var monster = new Monster();
Object.defineProperty(monster, 'name', {writable: true})
monster.name = "John";
monster.name
票数 0
EN

Stack Overflow用户

发布于 2013-06-24 03:10:37

你在getter函数中硬编码了"Jim“,所以不管是什么,它总是会返回"Jim”。您需要将属性的值存储在局部变量中,并从该变量中获取它:

代码语言:javascript
复制
function Animal() {
  var myName = "Jim";
  Object.defineProperty(this, "name", {
    set: function(n) { myName = n },
    get: function() { return myName; }
  });
}
票数 3
EN

Stack Overflow用户

发布于 2013-06-24 03:10:55

我不完全确定你期望它是如何工作的。毕竟,setter什么也不做,getter返回一个常量。

为什么不干脆这么做呢?

代码语言:javascript
复制
function Animal() {
    this.name = "Jim";
}

然后您可以执行以下操作:

代码语言:javascript
复制
var monster = new Monster();
monster.name = "John";
monster.name // John
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17264268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档