面向对象相关知识总结

  1. //1.hasOwnPrototype 判断是都是当前对象的自有属性
  2. var obj ={name:"zhangsan"};
  3. console.log(obj.hasOwnProperty("name"));//true
  4. //2.isPrototypeOf 判断是否是传入对象的原型对象
  5. functionFun(){}
  6. var fun=newFun();
  7. console.log(Fun.prototype.isPrototypeOf(fun));//true
  8. //console.log(obj.prototype.isPrototypeOf(obj));报错不是这样用的!!
  9. //3.propertyIsEnumerable 表示参数是否是当前对象的可枚举(可以使用for in 遍历)属性
  10. //4.Object.defineProperty() 为一个对象定义一个属性
  11. Object.defineProperty(obj,"age",{
  12. set:function(value){
  13. if(typeof value ==="number"&& value >=18){
  14. this.age = value;
  15. }else{
  16. console.log("年龄未满18岁");
  17. }
  18. },
  19. get:function(){
  20. return age;
  21. }
  22. });
  23. var o1={};
  24. //添加了一个name属性,值为"高通"
  25. Object.defineProperty(o1,"name",{
  26. value:"高通"
  27. });
  28. //添加了一个不可枚举属性,值为"170"
  29. Object.defineProperty(o1,"length",{
  30. enumerable:false,
  31. value:"170"
  32. });
  33. //添加一个不可使用赋值运算符的属性
  34. Object.defineProperty(o1,"age",{
  35. writable:false,
  36. value:18
  37. });
  38. o1.age=30;
  39. console.log(o1.age);//18
  40. //定义一个不可被删除的属性
  41. Object.defineProperty(o1,"color",{
  42. configurable:true,//值为true表示该属性可以被删除,值为false表示该属性不可被删除
  43. value:"黄种人"
  44. });
  45. //定义一个只读(只能获取值)属性
  46. Object.defineProperty(o1,"number",{
  47. get:function(){
  48. return30;
  49. }
  50. });
  51. //定义一个只写属性
  52. Object.defineProperty(o1,"gender",{
  53. set:function(v){
  54. console.log(v);
  55. }
  56. });
  57. //5.instanceOf arr是否是Array的实例
  58. var arr=[1,2,3];
  59. console.log(arr instanceof Array);//true
  60. //constructor
  61. console.log(Fun.prototype.constructor===Fun);//true

1.继承的六种方式

  1. /*实现继承的六种方式*/
  2. /*1.扩展原型对象的方法实现继承*/
  3. functionFoo1(){}
  4. //在Foo1函数上扩展一个fn1方法,由构造函数创建的对象都具有fn1这个方法
  5. Foo1.prototype.fn1=function(){};
  6. /*2.替换原型对象实现继承*/
  7. functionFoo2(){}
  8. //给Foo2函数的原型对象重新赋值,注意不要忘记添加constructor属性
  9. Foo2.prototype={
  10. constructor:Foo2,
  11. fn1:function(){},
  12. fn2:function(){}
  13. };
  14. /*3.混入继承*/
  15. //已知两个对象,obj2对象继承obj中的属性
  16. obj={name:"张三",age:16};
  17. obj2={};
  18. for(var key in obj){
  19. obj2[key]=obj[key];
  20. }
  21. //封装一个函数
  22. function mixin(target,source){
  23. for(var key in source){
  24. target[key]=source[key];
  25. }
  26. return target;
  27. }
  28. //jQuery中的extend方法就使用了混入继承
  29. /*4.混入+原型继承*/
  30. //给Foo4.prototype混入一些新的方法
  31. functionFoo4(){}
  32. mixin(Foo4,{fn1:function(){},fn2:function(){}});
  33. //jQuery中的jQuery.fn.extend()就是使用了这个方法
    1. // jQuery.fn==jQuery.prototype
  34. jQuery.fn.extend=function(obj){
  35. for(var key in obj){
  36. jQuery.fn[key]=obj[key];
  37. }
  38. return jQuery.fn;
  39. };
  40. /*5.经典继承*/
  41. var obj5={name:"liying",age:18};
  42. functionFoo5(){};
  43. Foo5.prototype=obj5;
  44. //封装一个方法
  45. function getFun(obj5){//传入已知的对象
  46. function F(){}
  47. F.prototype=obj5;
  48. returnnew F();//将继承创建的对象返回
  49. }
  50. //经典继承在ES5中得到了实现,Object.create()
  51. /*6.借用构造函数实现继承*/
  52. functionFoo6(name,age){
  53. this.name=name;
  54. this.age=age;
  55. }
  56. functionNewFoo(name,age,number){
  57. Foo6.call(this,name,age);
  58. this.number=number;
  59. }
  60. //newFoo构造函数借用Foo6构造函数中的属性和方法
  61. var obj =newNewFoo("张三",18,10);
  62. console.log(obj);//NewFoo {name: "张三", age: 18, number: 10}

2.创建对象的几种方式

  1. /*1.对象字面量*/
  2. var obj1 ={
  3. name:"zhangsan",
  4. age:18
  5. };
  6. /*2.构造函数创建对象*/
  7. functionFun(){}
  8. var obj2 =newFun();
  9. /*3.Object创建对象*/
  10. var obj3 =newObject();
  11. //动态的给obj3添加属性
  12. obj3.name="zhangsan";
  13. /*4.工厂模式*/
  14. //定义一个函数用来创建对象那个,只要调用一个这个函数就创建了以对象
  15. function createObj(name){
  16. var obj =newObject();
  17. obj.name=name;//变化的属性
  18. obj.sex="男";//这个方法创建的对象共有的方法
  19. obj.say=function(){
  20. console.log("说话的方法");
  21. }
  22. }
  23. /*5.原型创建对象*/
  24. //所有的属性方法都放在原型中,存在一个问题就是这样创建出来的实例对象是完全一致的
  25. functionRole(){}
  26. Role.prototype.name="zhangsan";
  27. Role.prototype.age=18;
  28. var role =newRole();
  29. /*6.混合方式创建对象构造+原型*/
  30. functionPerson(name){
  31. var obj=newObject();
  32. obj.name=name;//不同的属性通过构造函数
  33. }
  34. Person.prototype.sex="男";//共同的不会改变的属性放在原型中

3.函数调用的几种方式

  1. function fn(){
  2. console.log(this.name);
  3. return"fn函数的返回值";
  4. }
  5. /*1.方法调用*/
  6. //方法调用,this指向window,相当于是window调用
  7. fn();
  8. /*2.对象调用*/
  9. var obj={name:"zhangsan",fun:function(){console.log(this.name+"zhangsan的方法");}};
  10. obj.fun();//函数中的this指向obj
  11. /*3.构造函数调用*/
  12. var fns =new fn();//函数中的this指向函数的实例也就是fns
  13. //对于构造函数的返回值问题
  14. /*1.如果构造函数没有return语句,返回值默认为实例对象
  15. * 2.如果return 基本类型数据;返回值为实例对象
  16. * 3.如果return 对象;返回值为return中的对象
  17. * */
  18. console.log("****************");
  19. /*4.上下文调用模式call() apply()*/
  20. var obj4={
  21. say:function(){
  22. console.log("说话的方法");
  23. }
  24. };
  25. var obj5 ={name:"zhangsan"};
  26. //obj5对象想使用obj4的say方法
  27. obj4.say.call(obj5);
  28. /*
  29. * call(对象,参数1,参数2....)
  30. * apply(对象,[参数1,参数2,参数3])
  31. * */

4.原型链

来自为知笔记(Wiz)

时间: 2024-10-14 20:52:20

面向对象相关知识总结的相关文章

面向对象相关知识及常用操作(二)

本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员分为字段.方法和属性 字段:分为普通字段和静态字段,普通字段在每个对象的内存中均保存一份,静态字段仅在类的内存中保存一份 方法:分为普通方法.类方法和静态方法, 普通方法:由对象调用:至少一个self参数:执行普通方法时,自动将调用该方法的对象赋值给self: 类方法:由类调用: 至少一个cls参数:执行类方法时,自动将调用该方法的类复制给cls: 静态方法:由类调用:无默认参数: 字段和方法常见使用见下面例子: 1 #类

python的面向对象-实例(对象)的相关知识、实例化

1.对象就是实例,什么是实例 类运行的过程就是实例化的过程,实例化产生的结果就是产生了一个实例 class的牛逼之处就是不用手动的return,他会加载完函数之后,自动return  __init__这个函数里面的字典,字典当中封装了数据属性 函数属性就是属于类的 2.实例化 只要用类名加()的方式运行,(在类中这个运行叫实例化)首先会运行__init__这个函数 class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __ini

黑马程序员---Objective-C基础学习---类、对象、方法相关知识笔记

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 类.对象.方法相关知识笔记 Objective-C相对于C语言有了面向对象的特性,但是ObjC又没有其他面向对象语言那么多语法特性,ObjC本身对面向对象进行了精简.下面是一些相关知识笔记. 类定义 成员变量 方法和属性 self关键字 类定义 在C#.Java等其他高级语言中定义一个类是相当简单点的,直接一个关键字class加一对大括号基本就完成了,但是在ObjC中类的定义相对变化比较大.现

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了

Python学习之旅—面向对象进阶知识:类的命名空间,类的组合与继承

前言 上篇博客笔者带领大家初步梳理了Python面向对象的基础知识,本篇博客将专注于解决三个知识点:类的命名空间,类的组合以及面向对象的三大特性之一继承,一起跟随笔者老看看今天的内容吧. 1.类的命名空间 在上一篇博客中,我们提到过对象可以动态添加属性,一起来回忆下昨天的知识点,看如下的代码: class A: pass a = A() a.name = 'alex' print(a.name) 这里我们手动为a对象添加了一个属性name,然后直接打印可以得到a对象的名称.通过这个例子,我们可以

面试总结(一)——Java基础相关知识

面试总结(一)--Java基础相关知识 最近在面试,所以总结下面试容易问到的知识点,用来备份查看用. 若需转载,请注明出处. 1.面向对象的特点: 1.将复杂的事情简单化 2.面向对象将以前过程中的执行者,变成了指挥者 3.面向对象思想是符合人们思考习惯的思想 2.面向对象特征: 1.封装:隐藏对象的属性和实现的细节,仅对外提供公共访问方式 好处:将变化隔离,便于使用,提高复用和安全性. 原则:将不需要对外提供的内容隐藏起来,隐藏属性,提供公共方法对其访问. 2.继承:提高代码复用性,继承是多态

知识回顾、进程的相关知识和操作

1.编程语言的发展: 机器语言:二进制 汇编语言:指令,命令形式的 高级语言:面向过程(C)面向对象(python,c++,java) 2.操作系统的目标: 为了使用户更方便的使用系统 3.计算机的组成: cpu,主板,存储,输入,输出 4.并行.并发 并发:指两件或多件事情,在同一时间间隔内同时执行(宏观上是并行,微观上是串行) 并行:指两件或多件事情,在同一时间间隔内同时执行 5.进程有三部分组成: 代码段,数据段,PCB(进程控制块) 6.进程的三种基本状态: 就绪状态:除了cpu之外,进

Django学习【第28篇】:Django Admin的相关知识

Django Admin的相关知识 一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test() print(self.val) def test(self): print("Base.test") class Foo(Base): def test(self): print("FOO.test") # def func(s

Django Admin的相关知识

Django Admin的相关知识 一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test() print(self.val) def test(self): print("Base.test") class Foo(Base): def test(self): print("FOO.test") # def func(s