在构造函数中定义get / set

时间:2017-05-27 09:04:58

标签: javascript getter-setter

可以这样做:

__init_subclass__

但我的代码是在构造函数中定义的,所以我想要这样的东西:

var o = {
  _foo : "bar",
  get Foo() { return _foo; },
  set Foo(value) { _foo = value; }
};

该语法无效。是否有一些变化有效?

2 个答案:

答案 0 :(得分:5)

您可以使用prototype属性并指定setter和getter。

顺便说一下,你需要使用_foo作为属性,而不是局部变量。

function Something(defaultFoo) {
    this._foo = defaultFoo;
}

Object.defineProperty(Something.prototype, 'foo', {
    get: function() {
        return this._foo;
    },
    set: function(value) {
        this._foo = value;
    }
});

var something = new Something("bar");
console.log(something.foo);
something.foo = 'baz';
console.log(something.foo);

答案 1 :(得分:1)

您可以将这两个想法与.my-dropdown { position: relative; display: inline-block; } .my-dropdown-content { display: none; position: absolute; right: 0; background-color: #0A141A; min-width: 1400px; box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); z-index: 1; } .my-dropdown-content li { padding: 12px 16px; text-decoration: none; display: block; } .my-dropdown:hover .my-dropdown-content { display: block; position: fixed; height: 100vh; width: 100vw; top: 0; left: 0; } .my-dropdown-content a{ text-decoration:none; color:#fff; }结合使用:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<ul>
  <li>
    <a href="#"></a>
  </li>
  <li>
    <a href="#"></a>
  </li>
  <li>
    <a href="#"></a>
  </li>
  <li>
    <a href="#"></a>
  </li>
  <li class="my-dropdown"><a href="#">More. . .</a>
    <ul class="my-dropdown-content">
      <div class="col-md-12">
        <div class="row">
          <div class="col-md-4">
            <li><a href="#">one</a></li>
          </div>
          <div class="col-md-4">
            <li><a href="#">two</a></li>
          </div>
          <div class="col-md-4">
            <li><a href="#">three</a></li>
          </div>
        </div>
      </div>
    </ul>
  </li>
</ul>

请确保一致地引用Object.assign,而不是function Something(defaultFoo) { var _foo = defaultFoo; Object.assign(this, { get Foo() { return _foo; }, set Foo(value) { _foo = value; } }); } ,因为您从未对其进行过定义。

或者,使用ES6类表示法,您可以执行此操作 - 此处我将值存储在_foo中:

this._foo