javascript - ES7定义实例属性出错
巴扎黑
巴扎黑 2017-04-11 09:20:28
[JavaScript讨论组]

使用了es7的写法定义实例的属性:
先定义了class的静态属性defaultOptions,然后实例属性options是等于defaultOptions加上构造是传进去的options

class MyClass {
    static defaultOptions = {
        width: 300,
        height: 200,
        content: '',        
    };

    options = {...MyClass.defaultOptions,...options};

    constructor(options) {
      }

      showOptions(){
          console.log(this.options)
      }
};

let xxxx  = new MyClass({
    width:50,
    height:50
});

xxxx.showOptions();

结果显示options is not defined

babel编译后的代码如下:

var MyClass = function () {
    function MyClass(options) {
        _classCallCheck(this, MyClass);

        _initialiseProps.call(this);
    }

    _createClass(MyClass, [{
        key: 'showOptions',
        value: function showOptions() {
            console.log(this.options);
        }
    }]);

    return MyClass;
}();

MyClass.defaultOptions = {
    width: 300,
    height: 200,
    content: ''
};

var _initialiseProps = function _initialiseProps() {
    this.options = _extends({}, MyClass.defaultOptions, options);
};

;

var xxxx = new MyClass({
    width: 50,
    height: 50
});

xxxx.showOptions();

改成这样写

options = {...MyClass.defaultOptions,...this.options};

babel就编译成了这样

var MyClass = function () {
    function MyClass(options) {
        _classCallCheck(this, MyClass);

        this.options = _extends({}, MyClass.defaultOptions, this.options);
    }

    _createClass(MyClass, [{
        key: 'showOptions',
        value: function showOptions() {
            console.log(this.options);
        }
    }]);

    return MyClass;
}();

MyClass.defaultOptions = {
    width: 300,
    height: 200,
    content: ''
};
;

var xxxx = new MyClass({
    width: 50,
    height: 50
});

xxxx.showOptions();

结果显示options is not defined

把babel编译后的里面的一句代码

this.options = _extends({}, MyClass.defaultOptions, this.options);

变成

this.options = _extends({}, MyClass.defaultOptions, options);

这下就没有错误了

求解真确的写法?我不想按下面这样的方式写,虽然这样就没有错误了

    constructor(options) {
        this.options = {...MyClass.defaultOptions,...options};

      }

感激不尽!!!

巴扎黑
巴扎黑

全部回复(1)
PHP中文网

你可以自己为自己解释一下,对于下面这一句:

options = {...MyClass.defaultOptions, ...options};

后面的 ...options 从哪儿来?若能解释得通,就能按你说的写了。提示一下,constructor 接收的 options 只能在其内部访问,否则你觉得 this 的意义是啥?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号