[提高总结一]js面向对象

/**js的面相对象练习
 * Created by liyanq on 17/2/21.
 * 参考:http://coolshell.cn/articles/6441.html
 *      http://blog.csdn.net/liyanq528/article/details/52912252
 * 以前写过一次,感觉不熟练,再写一次。
 */
/*1:如果一个函数作为类来使用,函数名开头要大写。
 *2:Person(name, age)相当于构造函数constructor.
 *3:不加this是私有的,相当于private
 *4:不论是成员变量还是成员函数,都是按照构造函数->原型的顺序来找。
 *5:Object.getPrototypeOf获取对象的原型.
 *6:子类中,在不创建父类对象情况下,只能继承父类的原型方法,不能继承构造函数中的成员方法。
 * */
function Person(name) {//定义构造函数=Person.prototype.constructor
    var privateVar = {privateName: "privateName"};//定义私有变量
    this.name = name;//定义成员变量
    this.showInfo = function () {//定义成员方法,早于prototype里面定义调用
        console.log("this.showInfo:" + this.name + ":" + privateVar["privateName"]);
    };
}
Person.prototype.name = "Person.prototype.name";
Person.prototype.showInfo = function () {
    console.log("Person.prototype:" + this.name + this.readOnlyName);
};

Object.defineProperty(Person.prototype, "readOnlyName", {
    value: "readOnlyProperty",
    writable: false
});

var obj = new Person("Peter");//创建对象
obj.showInfo();//this.showInfo:Peter
Person.name = "Person";//定义类变量
Person.classFun = function () {//定义类方法
    console.log("classFun:" + this.name);
};
Person.classFun();//调用类方法:classFun:Person

function Student(name) {//构造函数继承;轻松实现多重继承啊
    // Person.apply(this, arguments);//整个复制了一遍构造函数,包括私有的。
    Object.getPrototypeOf(Person.prototype).constructor.call(this);//整个复制了一遍构造函数,包括私有的。
    this.showInfo = function () {//覆盖父类方法
        Object.getPrototypeOf(this).showInfo.call(this);
        //子类的内容
    };
}
Student.prototype = Object.create(Person.prototype);//原型继承,classFun()没继承过来。
var s1 = new Student("Student1");
s1.showInfo();//Person.prototype:Student1
var s2 = Object.create(Person.prototype);
s2.showInfo();//Person.prototype:Person.prototype.name
console.log(obj instanceof Student);//false
console.log(s1 instanceof Person);//true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值