ES6中class的get和set方法问题?

0 0 javascript ES6
ERP↘CC
ERP↘CC

声望值:195 0人

2019-02-18 14:14:33 提问

关注 0关注

收藏 0收藏, 260浏览

Class 的取值函数(getter)和存值函数(setter),写了一段测试代码:

let str = 'nihao';
class MyClass {
    constructor() {
    }
    get prop() {
        return str ;
    }
    set prop(value) {
        str = value;
    }
}

class ParentClas extends MyClass{
    constructor(){
        super();
        this.prop='haha';
    }
}

let parentClass=new ParentClas();

console.log('parentClass.prop',parentClass.prop);
parentClass.prop="heihei";
console.log('parentClass.prop',parentClass.prop);
console.log("str",str);

运行结果为:

clipboard.png

按照我的理解,parentClass对象有了自己的prop属性,

parentClass.prop的访问结果是haha,没有问题

但是parentClass.prop="heihei";以后,修改的应该是parentClass对象自身的prop属性,parentClass.prop属性为heihei,也没有问题,但是为什么str变量竟然也是heihei了,按道理,不应该访问到MyClass原型链呀。

请先 登录 后评论

4个回答

  • 00ffgfgf6973声望 2018-09-25 09:26

    parentClass.prop="heihei"这句话触发了你的set啊,然后你的set当中把str赋值成为heihei了啊
    请先 登录 后评论
  • MRRobot86声望 2018-09-25 09:26

    parentClass.prop = 'hehe' parentClass.hasOwnProperty('prop') // false
    请先 登录 后评论
  • 爬墙丶等红杏79声望 2018-09-25 09:26

    MyClass的原型链被parentClass继承了,get、set方法你懂吧?监听属性的取值、赋值动作
    请先 登录 后评论
  • freestyle131声望 2018-09-25 09:27

    这个问题跟ES6的继承机制有关系。 function Father() { } function Children(...args){ Father.apply(this, args) } Children.prototype = new Father() ES5的继承,实质是先创造子类的实例对象this然后再将父类的私有属性添加到this上面最后来改变原型链的指向但也会有一些问题假设父类构造函数上存在计数这也会导致计数不准确的问题 ES6的继承机制完全不同实质是先创造父类的实例对象this所以必须先调用super方法(即便子类没有书写constructor也会默认添加)然后再用子类的构造函数修改this
    请先 登录 后评论

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问