js 繼承

所謂繼承關係不過是把一個對象的原型指向另外一個對象而~~~~~~~~~~~~~
咱們須要牢記兩點:①__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); //人類
複製代碼
相關文章
相關標籤/搜索