应用文章原文链接:
https://www.jianshu.com/p/f9792fdd9915
以下为整理后可运行成功的示例代码,记录一下
//-------------------------------oop示例代码 开始
/*
javascript规定,
每一个构造函数都有一个prototype属性,指向另一个对象。
这个对象的所有属性和方法,都会被构造函数的实例继承。
这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。
__proto__是原型链,指向实例化的函数原型。
*/
//人类
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.run = function(){
console.log('跑路~')
};
Person.prototype.say = function(){
console.log('说话~')
};
console.log("Person的方法"+Person.prototype);
let person=new Person("张三",17);
console.log("person:"+person);
//男人
function Man(name,sex,age){
Person.call(this,name,age);
this.sex = sex;
}
/*
由于:
Man.prototype = Person.prototype;
Man.prototype.yyy = function(){
console.log('嘤嘤嘤');
}
这样的写法,因为复杂对象的赋值操作是引用而不是赋值,
所以会发现Person的prototype也改变了,不能这样使用,
【要在循环中进行赋值,来实现继承属性】
*/
// for(var key in Person.prototype){
// Man.prototype[key] = Person.prototype[key];
// console.log(key)
// }
//Man.prototype.constructor=Person.prototype.constructor;//发现构造不能赋值?==>需要用中介+call
//所以要用更优的解决方案:【中继】来做准备工作
function Ready(){}//
Ready.prototype = Person.prototype;//引用
Man.prototype = new Ready();//new 返回了一个新对象 __proto__指向被实例化的构造函数的prototype
Man.prototype.constructor = Man;
console.log(Man.prototype);
Man.prototype.yyy = function(){
console.log('嘤嘤嘤');
}
//.propertype是对象的内部方法,不能用JSON.stringify()查看其输出结果,只能debug看
console.log("Man的方法:"+Man.prototype);
console.log("被Man继承后的Person的方法:"+Person.prototype);
//通过new 关键字创建对象的实例
var xm = new Man("小明","女",18);
xm.yyy();
console.log(xm);
console.log(xm.sex);
console.log(xm.name);
//-------------------------------oop示例代码 结束