是否可以通过指针使对象为null或未定义?

时间:2019-01-01 13:48:09

标签: javascript pointers

@angular/common

人不会变得不确定,只有指针?

3 个答案:

答案 0 :(得分:1)

您可以使用包装对象来模拟该行为:

const reference = value => ({ 
  value,
  free() { this.value = undefined },
});

const val = ref => ref.value;

let person = reference({name: "Annah", age: 18});
let pointer = person;

console.log(val(person));

pointer.free();

console.log(val(person));

由于无法再访问person.name,因此必须使用val(person).name取消引用。


理论上,您可以创建两个引用同一事物的变量:

with({ 
 person: undefined,
 get pointer() { return this.person; },
 set pointer(value) { this.person = value },
}) {
  person = { some: "test" };
  console.log(pointer);
  pointer = undefined;
  console.log(person);
}

但是请不要那样做(除了娱乐)。

答案 1 :(得分:0)

创建一个对象来包含您的记录,并通过它们的标识符访问它们。例如,使用name作为标识符:

const people = {};
const person = { name: "Annah", age: 18 };

people[person.name] = person;

console.info(people[person.name]);  // Annah is there

delete people[person.name];

console.info(people[person.name]);  // undefined - Annah is gone

答案 2 :(得分:0)

从ES6开始,javascript中没有指针,但是对此有一种解决方法...

指针类:

/****
USAGE: 
var a = 3;
var b = new Pointer("a")
b.value = 1
console.log(a) // Logs "1"
****/






class Pointer{
  constructor(str){ // Called when "new Pointer()"
    this.var = str // Assign Pointer.var to the string
    this._value = window[str]
  }
  
  set value(value){
    window[this.var] = value
    this._value = value
  }
  
  get value(){
    return window[this.var]
  }
  changeLocation(str){
    this.constructor(str)
  }
  delete(){
    delete window[this.var]
  }
  
}

示例

// Put the Pointer Class HERE
var person = {name: "Annah", age: 18}; // Notice that let => var as Pointer cannot access lets and consts
var pointer = new Pointer("person"); // Pointer to person
pointer.value = undefined; // Sets value to undefined
// OR:
pointer.delete() // Deletes it permanently