所谓继承关系不过是把一个对象的原型指向另一个对象而~~~~~~~~~~~~~
我们需要牢记两点:①__proto__和constructor属性是对象所独有的;
② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性。
__proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,然后返回undefined,通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。
Object.prototype.__proto__ === null
prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法,即f1.__proto__ === Foo.prototype。
constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function。
function P1() { }
function P2() { }
P2.prototype.name = 'P2"s name';
P2.prototype.get = function (value) {
return value;
}
var obp2 = new P2();
P1.prototype = obp2;
alert(P1.prototype.get('out"s name'));
alert(P1.prototype.name);
var obp1 = new P1();
alert(obp1.get('obp1"s name'));
console.log(new P1().get(9)
---------------------
https:
2. 搞一个清空字符串的自定义方法clean
String.prototype.clean=function(){
return "";
};
var str="三尺龙泉万卷书";
alert(str.clean());
Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming:
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
function createStudent(name) {
var s = Object.create(Student);
s.name = name;
return s;
}
var xiaoming = createStudent('小明');
xiaoming.run();
xiaoming.__proto__ === Student;
Object.create(proto, [propertiesObject])
参数:
proto : 必须。表示新建对象的原型对象,即该参数会被赋值到目标对象(即新对象,或说是最后返回的对象)的原型上。该参数可以是null, 对象, 函数的prototype属性 (创建空的对象时需传null , 否则会抛出TypeError异常)。
propertiesObject : 可选。 添加到新创建对象的可枚举属性(即其自身的属性,而不是原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
非构造函数的继承
var Chinese = {
nation: '人类'
};
var Doctor = {
career: '我'
}
function object(o) {
function F() { }
F.prototype = o;
return new F();
}
var Doctor = object(Chinese);
Doctor.career = '我';
alert(Doctor.nation);
es6继承
class Person {
constructor(name) {
this.name = name;
}
printName() {
console.log(this.name);
}
}
class Bob extends Person {
constructor() {
super("111111");
this.hobby = "Histroy";
}
printHobby() {
}
}
console.dir(new Bob().name);
mp.weixin.qq.com/s?__biz=MjM…