面向对象1.7

查面向对象

面向对象复习

面向对象的三大特点:封装 继承 多态/重载

封装:减少代码冗余,提高代码的重复使用率。

继承:子类继承父类的属性。

多态:

现在学习的js是EcmaScript2014(ES5) 生成类靠构造函数,ecmascript2015(es6)用class生成类。

constructor 构造器

  1. 浏览器给每个类(函数)天生赋予一个prototype的属性,这个属性是一个对象,里面有个constructor的属性,叫构造器,指向当前的类本身

console.log(Person.prototype.constructor==Person)//turn
var z=new Person("zhang")

  1. 人为改变类的原型指向(给prototype赋值引用数据类型,基本数据类型不改变),浏览器赋予的constructor属性就不存在了可以人为添加。如果是简单的基本数据类型constructor还存在。
  2. 类在代码中扮演着三种角色,普通函数,普通对象,类
  3. 每个对象天生有一个__proto__的属性,叫原型,他指向父类的原型,obj.__proto__==Person.prototype  true

5.prototype和__proto__都叫原型,前者是函数的属性,后者是对象的属性,前者给程序员使用后者是浏览器用于查找原型的。

This指向

对象继承

  1. 克隆对象不是将一个对象赋值给另一个对象,var obj1=obj2这不是对象克隆,是把obj2的引用地址赋值给obj1.
  2. 通过for in 和Object.create()克隆对象

For in克隆的属性都是私有的,create()得到的属性都是公有的在原型上。

继承

1.7

面向对象

  1. 构造函数里的属性怎么看?看this,谁前面有this谁就是属性

num 不是属性,是私有作用域下的私有变量。

  1. 如何查找面向对象中的this。
  2. 构造函数里的this执行实例对象
  3. 如果是方法中的this

(1)      找到this  在调用方法时看方法前面的“.”是谁,this就是谁

(2)      替换this   将this换成你找到的那个结果

(3)      精确查找   用原型链查找模式去分析

3.关于构造函数的返回值问题

构造函数也是函数,每个函数都有返回值,构造函数返回的是this。

function Person(name,age){
var num=12;
this.name=name;
this.age=age
}

上面的这种可以通过.来实现的多个方法 我们把他叫做链式写法。

实现原理:每个方法使用完毕之后,不仅可以得到想要的结果,还需要把当前实例对象返回,才可以实现链式写法。

4.对象分析

console.log(arr.splice(1).concat(s).reverse())
var div=document.getElementById("div ")(×)

以后我们使用内置方法,出现内置方法报错

  1. 方法名写错。
  2. 内置方法的归属出错。
  3. 原型的批量添加和直接对象添加的区别

function Person(){
this.name="该打"
}
Person.prototype.age=45;
Person.prototype={
sex:56
}

如果是批量添加属性,没有改变原型的内存地址(浏览器开辟的)

如果是以对象形式添加,就会更改原型的内存地址,浏览器开辟的就被销毁了。

Person.prototype={
sex:56
}
var zhang=new Person;
var chen=new Person;
console.log(chen.age)

6.怎样给内置对象添加方法

如果给内置类的原型添加方法,使用对象形式添加,不起作用。

Array.prototype={sun:function...}  xxx  错的 浏览器会保护内置对象的原型内存地址,不让人为修改,只能使用批量的形式添加方法

Array.prototype.sun=function...

腾讯18年春招面试题

function Person(name){
this.name=name
}
Person.prototype.age=20;
Person.prototype.aword=[];
var jk=new Person("jk")
var rs=new Person("rs")
jk.age++;
console.log(jk)
rs.aword.push("oo")
console.log(jk)
console.log(rs)
console.log(jk.aword)

Jk.age++  等价于 jk.age=jk.age+1  先通过jk.age查找私有的age属性,没有,再找公有的age属性,有是20,然后加1为21.再赋值给jk的私有属性age。

Rs.aword.push(“oo”) 先rs查找私有的aword属性,没有,在查找公有的aword属性,有,结果是数组,引用数据类型,又会开辟一个内存地址,存放数组,将内存地址赋值给aword,然后去给这个地址中的aword添加了一个oo的元素。Jk.aword查找私有的,没有,再查找公有的,有,但是aword是内存地址,再向这个内存地址去查看这个数组,rs和jk查找的aword都是同一个内存地址的数组,所以一改则全改。

复习数组的方法

1.pop push shift unshift split

学习内置对象的方法

  1. 方法的功能
  2. 方法的参数
  3. 方法的返回值

原文地址:https://www.cnblogs.com/mo123/p/10233828.html

时间: 2024-12-16 17:55:05

面向对象1.7的相关文章

python学习 面向对象封装

from collectoins import namedtuplePoint=namedtuple('point',['x','y'])t1=Point(1,2)print(t1.x)print(t1.y)没有方法的类属性不会发生变化    定义简单 不能改变面向对象封装私有属性!!!私有方法!!!用装饰器描述的几个方法@property !!!@classmethod!!@staticmethod! 封装:class Teacher:     def __init__(self,name,p

python—面向对象的封装

封装 私有属性 class Teacher: __identifier = 'Teacher' #私有静态属性 def __init__(self,name,pwd) self.name = name self.__pwd = pwd #私有属性 内部使用,外部不能使用 def pwd(self): print(self.__pwd) alex = Teacher('alex','3714') alex.pwd() class Teacher: __identifier = 'Teacher'

python学习_day26_面向对象之封装

1.私有属性 (1)动态属性 在python中用双下划线开头的方式将属性隐藏起来.类中所有双下划线开头的名称,如__x都会自动变形成:_类名__x的形式.这种自动变形的特点是: a.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果.b.这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的.c.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆

python面向对象知识点疏理

面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写. 实例变量:定义在方法中的变量,只作用于当前实例的类. 继承:即一个派生类(de

php学习笔记 面向对象中[接口]与[多态性]的应用

代码如下: <?php /* 接口技术 * * 接口是一种特殊的抽象类,抽象类又是一种特殊的类 * * 接口和抽象类是一样的作用 * * 因为在PHP是单继承的,如果使用抽象类,子类实现抽象类就不能再去继承其他的类了 * * 如果既想实现一些规范,又想继承其他类.就要使用接口. * * 接口和抽象类的对比 * * 1.作用相同,都不能创建对象,都需要子类去实现 * * 2.接口的声明和抽象类不一样 * * 3.接口被实现方式不一样 * * 4.接口中的所有方法必须是抽象方法,只能声明抽象方法(不

php面向对象

面向对象 什么是面向对象? 面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程 序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性.灵活性和扩展性.为了实现整体 运算,每个对象都能够接收信息.处理数据和向其它对象发送信息. 什么是面向对象编程呢? 把每个独立的功能模块抽象成类形成 对象,由多个对象组成这个系统,这些对象之间都能够接收信息.处理数据和向其它对象

面向对象注意事项

在面向对象中,有实例变量和类变量,实例变量为类对象的实例成员,而类变量不仅类可以直接调用,而且类的对象也可以调用.类对象可以对实例变量进行添加.修改.删除操作等... 下面就用个示例来做参考: #!/usr/bin/env python # -*- coding:utf-8 -*- class PersonInfo(object): commity_data = 123 def __init__(self,name,age): self.name = name self.age = age de

java面向对象:面向对象的思想和概述

1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一种更符合我们思想习惯的思想 B:可以将复杂的事情简单化 C:将我们从执行者变成了指挥者 开发,设计,特征 面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情. 面向对象设计 其实就是在管理和维护对象之间的关系. 面向对象特征 封装(encapsulation) 继承(inheritance) 多态(polymorphism

6 面向对象之类和对象

1 面向对象和面向过程的区别 两者都是软件开发思想,先有面向过程,后有面向对象.在大型项目中,针对面向过程的不足推出了面向对象开发思想. 区别: 1)编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类.属性及其方法,然后通过实例化类.执行方法来完成功能. 2)封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能. 3)面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显. 2 类和对象 对象:客观存在的实体(一个具体的

简说面向过程与面向对象

昨天白天,因为在室外活动,无事可做,所以我思考了一天,在想怎么才能比较清晰的向人解释这两个概念.所以我对这两个概念的字面意思做了一下详细的解释.没想到,这可能真的会帮助我们非常简单的理解这两个概念. 面向:从字面上理解面向,就是我们的脸对着的地方,引申为我们能看到. 过程: 过程是事物从开始,到发展,到结束的整个经历 那么面向过程就是:我们能看到, 一个事物从 开始->发展->结束. 这对于我们写程序的人来说,可能会有感触,因为一开始我们写程序时.都是按照事件的发展.去安排计算机,一步一步的做