gpt4 book ai didi

javascript - 对除 JavaScript 中的一个对象之外的所有对象隐藏对象属性

转载 作者:行者123 更新时间:2023-11-28 15:23:23 25 4
gpt4 key购买 nike

假设我有代码:

function Obj(){
var _x = 5;
this.getX = function(){
return _x;
};
}

var obj = new Obj();

function God(){
var x = obj.getX(); // i want 5 here
}

function Human(){
var x = obj.getX(); // i want error/undefined here
}

var x = obj.getX(); // i want error/undefined here too

如何对除一个对象之外的所有对象隐藏 getX 属性?

最佳答案

假设您通过 new Godnew Human 使用 GodHuman 作为对象,您可以使用锁和 key 来允许以正确的类型访问该函数:

function Obj(lock) {
var _x = 5;
this.getX = function (key) {
if (key instanceof lock) {
return _x;
}
};
}

function God() {
var x = obj.getX(this);
console.log(x);
}

function Human() {
var x = obj.getX(this);
console.log(x);
}

var obj = new Obj(God);
var g = new God(); // logs 5
var h = new Human(); // logs undefined

当然,人们总是可以 pry 锁:

function Thief() {
var g = new God();
var x = obj.getX(g);
}

var t = new Thief(); // logs 5
<小时/>

这种锁和 key 机制的另一种方法是通过共享 secret :

function Obj(lock) {
var _x = 5;
this.getX = function (key) {
if (lock === key) {
return _x;
}
};
}

(function (scope) {
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
var secret = {};
scope.God = function () {
var x = scope.obj.getX(secret);
console.log(x);
};
scope.obj = new Obj(secret);
}(window));

function Human() {
var x = obj.getX();
console.log(x);
}

var g = new God();
var h = new Human();

关于javascript - 对除 JavaScript 中的一个对象之外的所有对象隐藏对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30264127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com