var obj = {};
obj.x = 1;
var bjo = inherit(obj);
bjo.x = 2;
console.log("x" in obj);//属性名(字符串) obj是否包含属性x
console.log(obj.x,bjo.x);
//继承
function inherit(proto) {
//proto是一个对象,但不能是null
if(proto == null) throw TypeError();
if(Object.create) return Object.create(proto); //如果Object.create()存在,使用它
var t = typeof proto; //否则进一步检查
if(t!=='object' && t!=='function') throw TypeError();
var F = function() {}; // 定义一个空构造函数
F.prototype = proto; // 将其原型属性设置为proto
return new F(); // 使用F()创建proto的继承对象
}
/*三、极简主义法
* 这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因。
* 1.首先,它也是用一个对象模拟"类"。在这个类里面,定义一个构造函数createNew(),用来生成实例。
* 2.然后,在createNew()里面,定义一个实例对象,把这个实例对象作为返回值。
* 3.使用的时候,调用createNew()方法,就可以得到实例对象。
* 这种方法的好处是,容易理解,结构清晰优雅,符合传统的"面向对象编程"的构造
* */
var Cat = {
sound:"喵喵!",//共有变量
createNew: function(){
//var sound = "喵 喵 喵";//私有变量
var cat = {
makeSound:function(){
alert(Cat.sound);
},
chooseSound:function(v){
Cat.sound = v;
alert(Cat.sound);
}
};
return cat;
}
};
var cat1 = Cat.createNew();
var cat2 = Cat.createNew();
cat1.makeSound();
cat2.makeSound();
cat2.chooseSound("啦啦啦");
cat1.makeSound();
网友评论