2015-09-18 29 views
0

您好我有下面的类定义:ecma6阻止访问整个实例

'use strict' 


class Human { 
    constructor(name, age) { 
    this._name = name || null; 
    this.age = age || 'no age defined'; 
    this.rights = ['Human Rights']; 
    } 

    get this() { 
    return 'access denied'; 
    } 

    set name(name) { 
    this._name = this._name ? this._name : name; 
    } 

    get name() { 
    return this._name; 
    } 
} 

let me = new Human(); 

console.log(me); // this should return a string "access denied" 

我想这可能是可以定义一个getter整个实例。但这不是,或者? 有没有人知道这件事?还是有其他方法来创建受限制的类?

亲切的问候 马丁

+2

我认为这里的getter是为'me'里面的'this'设置的,并且不会引用'me'本身。如果你尝试'我['this']'你会得到“拒绝访问” – Vivek

+2

当你'new'一个类你调用它的'constructor'而不是'get this()'(这不是一个保留的ES6类方法如'constructor')。 – sdgluck

+2

整个实例的getter *是*构造函数*。你能指定一个*受限制类的含义吗? – CodingIntrigue

回答

0

没有,但你可以做的是把一些代码模块和它唯一的出口部分英寸

// human.js              
class SecretHuman {            
    constructor(name) {           
    this.name = name;           
    }                
}                
let human = new SecretHuman('Bob');        
export class Human {           
    secret() {             
    console.log(`Secret human is ${human.name}`);    
    }                
}                

// test.js 
import {Human} from './human'; 
new Human().secret(); 
+0

所以只能有一个'SecretHuman'?每个“人”都会委托给那个人? –