javascript 原型链方式(prototype)



------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------

function sayColor(sPrefix, sSuffix){
    alert(sPrefix + this.color + sSuffix)
}
var obj = new Object();
obj.color = "red";
sayColor.call(obj, "the color is ", ", a ver nice color indeed.");

--------------------------------

        function ClassA(sColor) {
            this.color = sColor;
            this.sayhaha = function() {
                alert(this.color);
            }
        }
        function ClassC(sColor) {
            ClassA.call(this, sColor);//当前的this为classc自身
        }
        var classc = new ClassC("black");
        alert(classc.color);
        classc.sayhaha();


---------------------------------apply--------------------------------------

function ClassA(sColor){
    this.color = sColor;
    this.sayColor = function(){
    alert(this.color);
    }
}

function ClassB(sColor,sName){

    ClassA.apply(this, new Array(sColor));      //第一种Array,当前的this为classb自身
    //ClassA.apply(this, arguments);        //第二种arguments,当前的this为classb自身

    this.name = sName;
    this.sayName = function(){
    alert(this.name);
    }
}

var Class2 = new ClassB("blue","han");
alert(Class2.name);
alert(Class2.color);
Class2.sayName();
Class2.sayColor();





---------------------------------delete--------------------------------------

        function ClassA(sColor) {
            this.color = sColor;
        }
   
        function ClassC(sColor, sName) {
            this.classA = ClassA;
            this.classA(sColor);
            delete this.classA;
        }
       
        var classc = new ClassC("blue", "han");
        alert(classc.color);


------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------

function ClassB(){}
ClassB.prototype = new ClassA();
ClassB.prototype.name = "";




------原型链与call不同在于 [ 原型链方式(prototype)继承父类的所有方法, 而 call方式只能继承到this调用方式]---------

//这里我们用this调用函数
this.fnDisplay(); 

//这里我们prototype调用函数
class.prototype.fnDisplay = function() {}

//这里我们prototype调用函数
class.prototype.fnDisplay()


------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------

function ClassA(sColor){
    this.color = sColor;
    this.saycolor = function() {
                alert(this.color);
    }
}
ClassA.prototype.saycolor1 = function(){
    alert(this.color);
}
function ClassB(sColor, sName){
    ClassA.call(this, sColor)//call方式只能继承到this调用方式
    this.name = sName;
}

var objB = new ClassB("blue","Nicholas");
alert(objB.color);
objB.saycolor();
objB.saycolor1();


------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------


function ClassA(sColor){
    this.color = sColor;
    this.aaa = function(){
        alert("aaa");   
    }
}
ClassA.prototype.saycolor = function(){
    alert(this.color);
}
function ClassB(sColor, sName){
    ClassA.call(this, sColor);//只能继承this定义的对象及方法,不能继承到prototype定义的方法
    this.name = sName;
}

ClassB.prototype.sayName = function(){
    alert(this.name);
}

var objA = new ClassA("red");
var objB = new ClassB("blue","Nicholas");
objA.saycolor();
objB.aaa();
objB.saycolor();//无法调用,因为是原型所以继承不到。
objB.sayName();


------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------

function ClassA(sColor){
    this.color = sColor;
}
ClassA.prototype.saycolor = function(){
    alert(this.color);
}
function ClassB(sColor, sName){
    this.name = sName;
}
ClassB.prototype = new ClassA();//可以全部继承所定义的对象及方法
ClassB.prototype.color = "yellow";

ClassB.prototype.sayName = function(){
    alert(this.name);
}

var objA = new ClassA("red");
var objB = new ClassB("blue","Nicholas");
objA.saycolor();
objB.saycolor();//无法调用,因为是原型所以继承不到。
objB.sayName();


------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------


function ClassA(sColor){
    this.color = sColor;
    this.aaa = function(){
        alert("aaa");   
    }
}
ClassA.prototype.saycolor = function(){//这种方式为后期绑定。
    alert(this.color);
}
function ClassB(sColor, sName){
    ClassA.call(this, sColor)//call方式,子类继承不到prototype原型定义的方法。
    this.name = sName;
}
ClassB.prototype = new ClassA();//原型链方式继承父类的所有方法

ClassB.prototype.sayName = function(){
    alert(this.name);
}

var objA = new ClassA("red");
var objB = new ClassB("blue","Nicholas");
//objA.saycolor();
//objB.aaa();
objB.saycolor();
//objB.sayName();



------------------------------原型链方式(prototype)继承父类的所有方法 ,而 call方式为克隆this调用方式---------------------


function baseClass()
{
    this.showMsg = function()
    {
        alert("baseClass::showMsg"); 
    }
 
    this.baseShowMsg = function()
    {
        alert("baseClass::baseShowMsg");
    }
}
baseClass.showMsg = function()
{
    alert("baseClass::showMsg static");
}

function extendClass()
{
    this.showMsg =function ()
    {
        alert("extendClass::showMsg");
    }
}
extendClass.showMsg = function()
{
    alert("extendClass::showMsg static")
}

extendClass.prototype = new baseClass();

instance = new extendClass();
instance.showMsg(); //显示extendClass::showMsg
instance.baseShowMsg(); //显示baseClass::baseShowMsg
instance.showMsg(); //显示extendClass::showMsg

extendClass.prototype.baseShowMsg = function(){
    alert("extendClass::baseShowMsg henry")
}

instance.baseShowMsg(); //显示baseClass::baseShowMsg henry

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。