所谓继承关系不过是把一个对象的原型指向另外一个对象而~~~~~~~~~~~~~
咱们须要牢记两点:①__proto__和constructor属性是对象所独有的;
② prototype属性是函数所独有的,由于函数也是一种对象,因此函数也拥有__proto__和constructor属性。
__proto__属性的做用就是当访问一个对象的属性时,若是该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,而后返回undefined,经过__proto__属性将对象链接起来的这条链路即咱们所谓的原型链。
prototype属性的做用就是让该函数所实例化的对象们均可以找到公用的属性和方法,即f1.__proto__ === Foo.prototype。
constructor属性的含义就是指向该对象的构造函数,全部函数(此时当作对象了)最终的构造函数都指向Function。
function P1() { }
function P2() { }
//原型对象增长属性和方法
P2.prototype.name = 'P2"s name';
P2.prototype.get = function (value) {
return value;
}
//实例化P2构造函数的一个对象
var obp2 = new P2();//这个对象应该包含全部原型对象的属性和方法
//给P1的原型对象赋值一个对象,至关于P1继承了obp2的全部属性和方法
P1.prototype = obp2;//这个式子,简单来说就相似于a = b, b赋值给a这个总该明白吧?
//调用P1从obp2继承过来的get函数
alert(P1.prototype.get('out"s name'));
//展现P1从obp2继承过来的name属性
alert(P1.prototype.name);
//用构造函数P1实例化一个obp1对象
var obp1 = new P1();
//P1的原型对象prototype既然已经继承了obp2的全部属性和函数,那么依据P1所实例化出来的对象也都有obp2的属性和函数了
alert(obp1.get('obp1"s name'));
---------------------
https://blog.csdn.net/cc18868876837/article/details/81211729
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) {
// 基于Student原型建立一个新对象:
var s = Object.create(Student);
// 初始化新对象:
s.name = name;
return s;
}
var xiaoming = createStudent('小明');
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true
Object.create(proto, [propertiesObject])
//方法建立一个新对象,使用现有的对象来提供新建立的对象的proto。
参数:
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); //人类
复制代码