标签:单根继承 对象冒充 json let fun public 检测 好处 als
面向对象的三大特征:1、封装 2、继承 3、多态
纯面向对象的访问级别:
JS都是public,都可访问;可模拟private;不需要protected、package
let Student=function(name,age){ this.name=name; // let age =age; 报错,age已定义; 局部变量 this.show=function(){ console.log(‘我是‘+this.name); } } let stu1=new Stu(‘学生‘,20); stu1.show(); 或 let Student=function(name,age){ this.name=name; let_age=age; // let age =age; 报错,age已定义; 局部变量 this.show=function(){ console.log(`我是${this.name},今年¥{_age}岁); } } let stu1=new Stu(‘学生‘,20); console.log(stu1_age); stu1.show();
let Student=function(name,age,sex){ this.name=name; this.age=age; this.sex=sex; this.show=function(){ console.log(`我是${this.name},今年${this.age}岁,性别${this.sex}`); } } ‘name‘ 属性名,字符串 Object.defineProperty(Student.prototype,‘name‘,{ //objec.defineProperty固定写法,Student.prototype设置set/get的对象 set:function(name){ // 最后单独设置了名字,进入这一句,输出改变后的名字和‘我是set方法‘ console.log(‘我是set方法‘); this._name=name; // _name 初始化,必须加下划线 }, // 作为参数,用逗号 get:function(){ // 不管最后有没有单独设置其他名字,因为有return,都要进入这一句,输出‘我是get方法‘ console.log(‘我是get方法‘); //可有可无 return this._name; } }); let stu1=new Student(‘vivi‘,22,‘女‘); console.log(stu1.name); stu1.name=‘json‘; stu1.age=30; stu1.sex=‘man‘; stu1.show();
JS-单根继承,缺陷得到一定解决;es6以前JS没有继承方法
let People =function(name,age){ this.name=name; this.age=age; } People.prototype.into=function(){ // 方法;可继承共有的;into自己取的名字 console.log(`Hi,我是${this.name}`); } let ChinesePeople=function(name,age){ this.inhert=People; this.inhert=(name,age); // 不是继承,只是调用别人的 delete this.inhert; // delete 关键字 } let c1=new ChinesePeople("姓名",22); console.log(c1.name,c1.age); // 输出 姓名,20 c1.intro(); // 检测,输出 空; (1) console.log(c1.instanceof CinesePeople); // instanceof 检测;输出true; (2) console.log(c1.instanceof People); // 输出false;不是继承;(3)
call/apply区别:传参 call(参数列表) apply(数组)
同上 let ChinesePeople=function(name,age){ People.call(this,name ,age); People.apply(this[name,age]); } let c1=new CinesePeople("姓名",22);
同上 ... let c1=new ChinesePeople(‘姓名‘,22); console.log(c1.__proto__); // 访问原型;__proto__ 是2条下划线; ChinesePeople{}... console.log(c1.__proto__.__proto__.__proto__); //一级一级往上访问原型
let ChinesePeople=function(name,age){ People.call(this,name,age); // 加入这句 } ChinesePeople.prototype = new People(); let c1 = new ChinesePeople("姓名",20); let c2 = new ChinesePeople("姓名",21); console.log(c1.name,c1.age); c1.intro(); console.log(c1 instanceof People);
prototype 和 proto 区别:
例: Object.definePropertype(Teacher.prototype,‘name‘{ set:function(name){ this.name=name; }, // 作为参数,使用逗号 get:function(){ return this._name; } });
继承:1、对象冒充法不是继承,运用关键字delete,输出可用intro、intanceof检测
标签:单根继承 对象冒充 json let fun public 检测 好处 als
原文地址:http://www.cnblogs.com/llying/p/7528809.html