类方法与对象方法

js函数式编程确实比很多强语言使用灵活得多,今天抽了点时间玩下类与对象方法调用优先级别,顺便回顾下继承

暂时把原型引用写成继承

先看看简单的两个继承

var Parent = function(){};
var b = new  Parent();
Object.defineProperty(b,"Name",{value:"John",writable:true});
var A = function(){};
A.prototype= b;
var a = new Child();
alert(a.Name); //John

再加点料,给父类加上类方法

var B = function(){this.getName=function(){};
var b = new B();
Object.defineProperty(b,"Name",{value:"John",writable:true});
B.prototype.getName = function(){return "Parent said:" + this.Name;};B.prototype.setName = function(value){this.Name = value;};
var A = function(){};
A.prototype= b;
var a = new A();
alert(a.Name); // Parent said John
alert(a.getName()); //Parent said Johna.setName("Keven");alert(a.getName());//Parent said Keven

子类继承并使用了父类原型的方法和属性, 也能通过父类提供的方法修改继承的属性值,再来加点料

var Parent = function(){this.getName=function(){return "Parent child object said:"+this.Name};};
var b = new Parent();
Object.defineProperty(b,"Name",{value:"John",writerable:true});
Parent.prototype.getName = function(){return "Parent sard:" + this.Name;};
Parent.prototype.setName = function(value){this.Name = value;};
var A = function(){};
A.prototype= b;
var a = new A();
alert(a.Name); // Parent said John
alert(a.getName()); //Parent said Johna.setName("Keven");alert(a.getName());//Parent child object said John

What, 最后一条输出没有出来Keven, 而是调用了对象的方法,此处可以看出对象方法优先于原型方法调用,当对象方法没有找到时会向上层原型查找

再来看看类方法,再来加点料,Parent类加上getName方法,胃口有点重

var Parent = function(){this.getName=function(){return "Parent child object said:"+this.Name};};
var b = new Parent();
Object.defineProperty(b,"Name",{value:"John",writerable:true});
Parent.prototype.getName = function(){return "Parent sard:" + this.Name;};
Parent.getName = fucntion(){return this.Name;};
Parent.prototype.setName = function(value){this.Name = value;};
var A = function(){};
A.prototype= b;
var a = new A();
alert(a.Name); // Parent said John
alert(a.getName()); //Parent said John
a.setName("Keven");
alert(a.getName());//Parent child object said Keven
alert(A.prototype.Name); //Johnalert(A.getName()) // type error, undefine is not a function

最后一条报错,A并没有继承Parent的getName方法,此处可以理解Parent.getName为静态方法,不会被子类继承

var Parent = function(){this.getName=function(){return "Parent child object said:"+this.Name};};
var b = new Parent();
Object.defineProperty(b,"Name",{value:"John",writerable:true});
Parent.prototype.getName = function(){return "Parent sard:" + this.Name;};
Parent.getName = fucntion(){return this.Name;};
Parent.prototype.setName = function(value){this.Name = value;};
var A = function(){this.getName=function(){return "A object said:"+this.Name};};
A.prototype= b;
var a = new A();
alert(a.Name); // Parent said John
a.setName("Keven");
alert(a.getName());//A object said Keven
alert(A.prototype.Name); //John
alert(A.getName()) // type error, undefine is not a function

  

时间: 2024-10-10 05:14:56

类方法与对象方法的相关文章

OC基础笔记——类方法和对象方法和封装(广州黑马一期)

对象方法: 1.声明和实现方法时候,以 -开头 2.对象方法是隶属于对象,只能通过对象调用 3.对象方法中可以直接访问成员变量,因为对象方法和成员变量都是隶属于该对象的 4.对象方法中可以调用其他对象方法 5.对象方法中也可以调用类方法 类方法: 1.声明和实现的标识符都是 + 2.类方法它是属于类本身的 3.类方法是直接通类名调用的,不能通过对象调用 4.类方法不能访问成员变量,因为成员变量是对象的,不是类的 5.在类方法中不能直接调用对象方法,也就是说不能通过self来调用对象方法 如果你要

ios开发 oc 的类方法与对象方法

首先我们先来了解一下什么是类方法与对象方法. 对象方法: 对象是由"-"开头.比如:-(void)Runner: 对象方法顾名思义只能由对象来调用 比如说: @interface Person : NSObject (void)Runner://对象方法 @end: int main() { Person *p=[Person new];//Person是一个类,它创建一个对象p. [p Runner];//p调用Runner这个方法: return 0; { 在对象方法中可以直接访问

OC基础--OC中的类方法和对象方法

PS:个人感觉跟C#的静态方法和非静态方法有点类似,仅仅是有点类似.明杰老师说过不要总跟之前学过的语言做比较,但是个人觉得,比较一下可以加深印象吧.重点是自己真的能够区分开! 一.OC中的对象方法 1.以减号“-”开头 2.只能让对象调用,没有对象,这个方法根本不可能被执行 3.对象方法能访问实例变量(也就是成员变量) 二.OC中的类方法 1.以加号“+”开头 2.只能用类名调用,对象不能调用 3.类方法中不能访问实例变量(也就是成员变量) 4.适用场合:当不需要访问成员变量的时候,尽量用类方法

Objective-C - 类方法与对象方法

类方法与对象方法 /* 对象方法 1> 减号 - 开头 2> 只能由对象来调用 3> 对象方法中能访问当前对象的成员变量(实例变量) 类方法 1> 加号 + 开头 2> 只能由类(名)来调用 3> 类方法中不能访问成员变量(实例变量) 类方法的好处和使用场合 1> 不依赖于对象,执行效率高 2> 能用类方法,尽量用类方法 3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法 可以允许类方法和对象方法同名 */ @interface Perso

14-oc类方法和对象方法的区别?

对象方法以-开头, 类方法以+开头 对象方法必须用对象调用, 类方法必须用类来调用 对象方法中可以直接访问属性(成员变量), 类方法中不可以直接访问属性(成员变量) 类方法和对象方法可以进行相互调用(展示代码) 对象方法中可以直接调用类方法 类方法中间接调用对象方法 (注意: 不建议这样使用) 类方法中可以直接调用其它类方法 对象方法中可以直接调用对象方法

黑马程序员--Objective-C类方法与对象方法、区别、与调用-我之见解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 类方法. 1. 特点: 以加号( + )开头, 调用格式:  [类名  方法名] 类方法的好处:不需要创建实例对象,直 接通过类名访问,节省空间 ,提高了效率 2.注意事项: 类方法可以和实例方法同名, 相互之间互不影响 类方法可以从父类

self在类方法和对象方法中的应用

谁调用当前方法,self就代表谁 * self在对象方法中,self代表当前对象 * self在类方法中个,self代表类 > self在对象方法中 可以利用self->属性名称的方式访问成员变量 > [self 方法名称]; 调用其它方法(类方法/对象方法)

静态方法与实例方法,类方法与对象方法

最近看资料经常看到上面静态方法之类的说法,仔细查阅资料后总结解释如下: 最最简便的方法就是: 如果方法名字前面的单个减号(-)表明该方法是一个实例方法,也可以称呼为对象方法 如果方法名字前面是一个加号(+),则表明该方法是一个静态(static)方法,也可以称呼为类方法 再则关于静态方法与类方法是一个意思,只是很多人对于这个方法的称呼不一样罢了. 实现部分: 注意:下面的 -(id)init即为构造函数.对应的,还有一个-(void)dealloc方法用来释放资源(类似于析构函数或c#中的dis

类方法和对象方法

类方法: 1>加号 + 开头 2>只能由类(名) 来调用 3>类方法中不能访问成员变量 类方法的好处和使用场合 1>不依赖于对象,执行效率高 2>能用类方法,尽量用类方法 3>场合:当方法内部不需要使用到成员变量的时候,就可以改为类方法 对象方法: 1>减号 - 开头 2>只能由对象来调用 3>对象方法能访问当前对象的成员变量(实例变量)

OC -- 类方法和对象方法

#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, retain) NSString *name; @property (nonatomic, assign) int age; - (void)print;       // 对象方法 + (void)introduce;   // 类方法 @end @implementation Person - (void)print{ /