利用原型对对象的属性和方法进行扩展
有三种方法对对象的属性进行扩展
var a ={}; //空的对象,如何扩展空对象的属性呢?
a.__proto__.name ="hjm";//如果是空对象就是用这种方法进行扩展 这个也是隐式的调用
a.age="18";//这种是直接扩展,其实用到了下面的代码
//这个其实是默认的隐藏调用下面的代码
//1.Object.getPrototypeOf(a).age="18";
//2.a.__proto__.name ="hjm";
//3.a.age="18"; 这也算一种 共三种
// console.log(a.age);//18
// console.log(a.name);//hjm 这样子就可以扩展出新的属性
如何进行简单的继承呢?
function Per(){
this.getName=function(name){
console.log("这是构造函数内部创建的方法"+name);
}
}
Per.prototype.getAge=function (age) {
console.log("这是通过原型创建的方法"+age);
}
var a={};
a.__proto__=Per.prototype;
// a.getAge("18");//这是通过原型创建的方法18
// a.getName("hjm");//Prototype.html:32 Uncaught TypeError: a.getName is not a function
-----------------------以上为简单继承,下面为完全继承----------------------
//简单的方式实现继承 js中是无法实现多继承的
// 根据上面的弊端,想要完全继承per该怎么做呢
var b={};
b.__proto__= new Per();
b.__proto__.constuctor=b;
//通过这两部分就可以完全实现Per的全部被方法
b.getName("hjm");
b.getAge(14);
// 这是构造函数内部创建的方法hjm
// 这是通过原型创建的方法14
如何实现串联继承呢
// 串联继承
function M(){
this.showM=function(){
console.log("这是M类的方法");
}
}
function N(){
this.showN=function(){
console.log("这是N类的方法");
}
}
function k(){}
N.prototype= new M();
N.prototype.constuctor=N;
k.prototype= new N();
k.prototype.constuctor=k;
var koo = new k();
koo.showN();
koo.showM();
// 这是N类的方法
//这是M类的方法