console.log(typeof Gadget.setPrice); // "undefined"
console.log(typeof iphone.isShiny); // "undefined"
Gadget.prototype.isShiny = Gadget.isShiny;
console.log(iphone.isShiny()); // "you bet"
而私有静态成员,我们可以利用其闭包特性去实现,以下是两种实现方式。
第一种实现方式:
复制代码 代码如下:
var Gadget = (function () {
// 静态变量/属性
var counter = 0;
// 闭包返回构造函数的新实现
return function () {
console.log(counter += 1);
};
} ()); // 立即执行
var g1 = new Gadget(); // logs 1
var g2 = new Gadget(); // logs 2
var g3 = new Gadget(); // logs 3
可以看出,虽然每次都是new的对象,但数字依然是递增的,达到了静态成员的目的。
第二种方式:
复制代码 代码如下:
var Gadget = (function () {
// 静态变量/属性
var counter = 0,
NewGadget;
//新构造函数实现
NewGadget = function () {
counter += 1;
};
// 授权可以访问的方法
NewGadget.prototype.getLastId = function () {
return counter;
};
// 覆盖构造函数
return NewGadget;
} ()); // 立即执行
var iphone = new Gadget();
iphone.getLastId(); // 1
var ipod = new Gadget();
ipod.getLastId(); // 2
var ipad = new Gadget();
ipad.getLastId(); // 3
数字也是递增了,这是利用其内部授权方法的闭包特性实现的。
总结
这是对象创建模式的下篇,两篇一起总共9种模式,是我们在日常JavaScript编程中经常使用的对象创建模式,不同的场景起到了不同的作用,希望大家根据各自的需求选择适用的模式。
您可能感兴趣的文章: