如何只继承成员属性但不继承原型链?

bhbhxy 2017-04-11 05:04:44
旧版本的语法可以这样写:
function B() {
A.call(this);
}

只继承A类的成员但不包括prototype
请问如果用ES6的语法应该怎么写呢?
...全文
145 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2017-04-11
  • 打赏
  • 举报
回复

class Test{
            constructor(SubClass){
                this.a=1;
                if(new.target==SubClass){
                    return Object.assign({},this);
                }
            }
            show(){
                alert(this.a);
            }
        }
        class M extends Test{

        }
        let t=new M(M);
        alert(t.a);
        t.show();
改成这样试试
似梦飞花 2017-04-11
  • 打赏
  • 举报
回复
引用 4 楼 bhbhxy 的回复:
[quote=引用 3 楼 zzgzzg00 的回复:]

class A{
            constructor(){
                this.a=1;
                this.b=2;
            }
            show(){
                alert(this.a);
            }
        }
        class C{
            constructor(obj){
                Object.assign(this,obj);
            }
        }
        class B extends C{
            constructor(){
                super(new A());
            }
        }
        let b=new B();
        console.log(b.a);
        console.log(b.b);
        b.show();
或者包一层试试
这个方法可行,但第一种new.target始终是undefined[/quote] 恩 那个只能在构造方法里生效 是我记错了
bhbhxy 2017-04-11
  • 打赏
  • 举报
回复
引用 3 楼 zzgzzg00 的回复:

class A{
            constructor(){
                this.a=1;
                this.b=2;
            }
            show(){
                alert(this.a);
            }
        }
        class C{
            constructor(obj){
                Object.assign(this,obj);
            }
        }
        class B extends C{
            constructor(){
                super(new A());
            }
        }
        let b=new B();
        console.log(b.a);
        console.log(b.b);
        b.show();
或者包一层试试
这个方法可行,但第一种new.target始终是undefined
似梦飞花 2017-04-11
  • 打赏
  • 举报
回复

class A{
            constructor(){
                this.a=1;
                this.b=2;
            }
            show(){
                alert(this.a);
            }
        }
        class C{
            constructor(obj){
                Object.assign(this,obj);
            }
        }
        class B extends C{
            constructor(){
                super(new A());
            }
        }
        let b=new B();
        console.log(b.a);
        console.log(b.b);
        b.show();
或者包一层试试
bhbhxy 2017-04-11
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:

class A{
            constructor(){
                this.a=1;
            }
            show(){
                if(new.target!=A){
                    throw new Error('can not extends');
                }
                alert(this.a);
            }
        }
        class B extends A{
            constructor(){
                super();
            }
        }
        let b=new B();
        console.log(b.a);
        b.show();
es6的继承是现有父类的this 之后在父类的this上添加子类的东西 所以继承的时候就有了父类的所有东西了 而es5正好相反 做检测试试
好办法,学习了,非常感谢
似梦飞花 2017-04-11
  • 打赏
  • 举报
回复

class A{
            constructor(){
                this.a=1;
            }
            show(){
                if(new.target!=A){
                    throw new Error('can not extends');
                }
                alert(this.a);
            }
        }
        class B extends A{
            constructor(){
                super();
            }
        }
        let b=new B();
        console.log(b.a);
        b.show();
es6的继承是现有父类的this 之后在父类的this上添加子类的东西 所以继承的时候就有了父类的所有东西了 而es5正好相反 做检测试试

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧