技术码头

js写类

2018-11-03  本文已影响4人  石菖蒲_xl
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();
上一篇下一篇

猜你喜欢

热点阅读