前言
眼看很多公司都开始尝试使用ReactNative,达到跨平台开发,最近也写了很多文章,希望让更多想了解的同学快速上手ReactNative.
如果喜欢我的文章,可以关注我微博:袁峥Seemygo
ReactNative之自己实现继承
- 在JS中,通过function自定义类,是没有继承这个功能的,要想实现继承,必须自己实现。
- JS中要想实现继承,可以通过call这个方法实现。
call方法作用和原理
- 1.交换方法调用
- 如果call方法传入的参数是方法(sayHi),那么call的作用就是交换方法调用
function sayHello(a,b)
{
alert('hello');
}
function sayHi(a,b)
{
alert('hi');
}
sayHello.call(sayHi); // 打印 hello,交换方法调用,其实是调用sayHello方法,sayHello交换sayHi
- 2.交换方法调用者
- 如果call方法传入的参数是对象(sayHi),那么call的作用就是交换方法
function Class1()
{
this.name = "类1";
this.log = function()
{
alert(this.name);
}
}
function Class2()
{
this.name = "类2";
}
var c1 = new Class1();
var c2 = new Class2();
c1.log.call(c2); // 打印类2,让c2调用c1的log方法,交换方法调用者
call实现继承
由于call可以实现方法调用者交换,利用这个特性,就能实现继承。
比如类B想要继承类A,那么本质无非就是把类A中的所有属性和方法拷贝一份到类B中
只要生成类B对象的时候,底层去调用类A的构造方法,就能实现了。
继承具体实现原理和代码
function A(name,age)
{
this.name = name;
this.age = age;
this.log = function()
{
alert(this.name);
}
}
function B(name,age)
{
// 这句话就会去让b对象调用A的构造方法,因为A只有构造方法,如果一个方法实现中有this,一般都是构造方法.
// A的构造方法,就是在定义属性和方法,因此B也有了
A.call(this,name,age);
}
var b = new B('yz',18);
console.log(b);
- 打印效果