(function () {
///功能隐藏所有属性,把方法暴露在外部
///编辑的核心封装方法
function encapsulate(_this) {
var obj = {}
for (var i in _this) {
(function (proto) {
if (typeof proto !== "function") return;
obj[i] = function () {
return proto.apply(_this, arguments);
}
})(_this[i]);
}
return obj;
}
//测试: //写一个构造函数
function B() {
this.say = function () {
console.log("say something");
}
this.title = "121";
};
B.prototype.set = function (name, value) {
this[name] = value
};
B.prototype.get = function (name) {
if (name === undefined) return this;
elsereturn this[name];
}
B.prototype.create = function () {};
var a = encapsulate(new B());
a.set("id", 1);
console.log(a.id);
//-->undefined
console.log(a.get("id"));
//-->1
a.say();
//-->say somting
console.log(a.title);
//-->undefined
var b = new B();
b.set("id", 1);
console.log(a.id);
//-->1
console.log(a.get("id"));
//-->1
a.say();
//-->say somting
console.log(a.title);
//-->121
//当然也可以吧encapsulate写到Function的原型链上 这样可能影响到其他js函数
})();
js 封装 封装new 掉对象的所有属性,只暴露出对象的方法
最新推荐文章于 2023-05-13 10:55:57 发布