第172天:面向对象基本知识点

一、构造函数和普通函数的区别

在命名规则上,构造函数一般是首字母大写,普通函数遵照小驼峰式命名法。

在函数调用的时候:

function fn() { }

 构造函数:1. new fn( )

2 .构造函数内部会创建一个新的对象,即f的实例

3. 函数内部的this指向 新创建的f的实例

4. 默认的返回值是f的实例

 普通函数1. fn( )

2. 在调用函数的内部不会创建新的对象

3. 函数内部的this指向调用函数的对象(如果没有对象调用,默认是window

4. 返回值由return语句决定

构造函数的返回值

有一个默认的返回值,新创建的对象(实例)

当手动添加返回值后(return语句):

1. 返回值是基本数据类型-->真正的返回值还是那个新创建的对象(实例)

2. 返回值是复杂数据类型(对象)-->真正的返回值是这个对象

二、Get/Set访问器

语法:

Object.defineProperty(obj, prop, descriptor)

参数:

obj:目标对象

prop:需要定义的属性或方法的名字。

descriptor:目标属性所拥有的特性。

可供定义的特性列表:

  • value:属性的值
  • writable:如果为false,属性的值就不能被重写。
  • get: 一旦目标属性被访问就会调回此方法,并将此方法的运算结果返回用户。
  • set:一旦目标属性被赋值,就会调回此方法。
  • configurable:如果为false,则任何尝试删除目标属性或修改属性以下特性(writable, configurable, enumerable)的行为将被无效化。
  • enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。
 1 Object.defineProperty(this, "price", {
 2     get: function () {return price*0.9;},
 3     set: function (value) {
 4         /*大概普通产品的价格都在0--1万*/
 5         if(value>10000)
 6         {
 7             alert(‘产品价格必须在0--1万之间‘);
 8         }else{
 9             price = value;
10         }
11     }
12 });
1 function Person() {
2     var age = new Date().getFullYear() - 18;
3     Object.defineProperty(this, "age", {
4         get: function () { alert("内部存储数据为:" + age); return new Date().getFullYear() - age; },
5         set: function (value) { age = value; }
6     });
7 }  

使用一下代码进行测试:

1 var p = new Person();
2 p.age = 1994;
3 alert("外部获取到的数据为:" + p.age);  

三、函数声明和函数表达式的区别

函数声明是可以提升的,而函数表达式不可以提升

当我们定义一个函数表达式,在这个表达式前面是访问不到的。

1 //函数声明,变量fn以及其实现被提升到顶部
2 function fn(){
3     console.log(‘函数‘)
4 }
5 //函数表达式,仅变量fn2被提升到顶部,实现没有被提升
6 var fn2 = function(){
7     console.log(‘函数变量形式‘)
8 }

四、设置某个属性是否可写

1 /*我们的需求:自动计算打折后的价格*/
2 Object.defineProperty(this, "price", {
3     value:5000000,
4     writable: false,
5 });

原文地址:https://www.cnblogs.com/le220/p/8427652.html

时间: 2024-11-13 10:09:19

第172天:面向对象基本知识点的相关文章

PHP面向对象关键知识点回顾

一,类中的析构函数(__destruct): 析构函数是自动调用的 析构函数主要用于销毁资源 析构函数的调用顺序是先创建的对象最后被销毁(原理是栈的先进后出) 析构函数什么时候被调用 (1)当程序(进程结束)推出时 (2)当一个对象成为垃圾对象时候,该对象的析构方法也会被调用 (3)所谓垃圾对象,就是指没有任何变量再引用它(没有变量再只指向堆中的对象) (4)一旦对象成为垃圾对象,析构函数就会立即被调用 二,类中使用静态变量(static) 静态变量的引入是为了解决不同的对象实例能够共享同一个变

面向对象软件工程知识点

面向对象软件工程知识点  1.封装是指把对象的(A)结合在一起,组成一个独立的对象. A.属性和操作 B.信息流 C.消息和事件 D.数据的集合 2.状态图和活动图建立了UML面向对象开发过程中的对象动态(B)模型. A.交互      B.状态       C.体系结构     D.软件复用 3.UML的(C)模型图由活动图.顺序图.状态图和合作图组成. A.用例 B.静态 C.动态 D.系统 4.在UML的需求分析建模中,对用例模型中的用例进行细化说明应使用(A). A.活动图     B.

java面向对象编程知识点总结

一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类型. 常用成员有四种:类字段.类方法.实例字段.实力方法. 其它引用类型还包括数组.接口.枚举和注解. 2)字段和方法 示例:一个简单的类和成员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class Circle{

php面向对象基础知识点总结

下面是一些PHP面向对象基础知识的摘录,摘录内容来自PHP5.1手册. 1.类的变量成员叫做“属性”,或者叫“字段”.“特征”,在本文档统一称为“属性”. 2.属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是 在编译阶段之后在运行阶段运算出的常数. 3.在类的成员方法里面,可以通过$this->property(property是属性名字)这种方式来访问类的属性. 方法,但是 要访问类的静态属性或者在静态方法里面却不能使用,而是使用self:

面向对象<基础>知识点

1 使用了未实例化的对象会出现java.lang.NullPointException 2 一个栈内存空间只能指向一个堆内存空间,如要指向其他堆内存空间,需先断开当前指向 3 只要是被封装的属性就必须通过gette/setter方法设置和取得 4 匿名对象就是没有明确给出名字的对象.一般匿名对象只使用一次,而且匿名对象只在堆内          存中开辟空间,而不存在栈内存的引用  在实际开发中基本上都是作为其它实例化对象的参数传递 5 ==是比较内存地址,.equals()比较值 6 Stri

面向对象<高级>知识点

继承: 通过子类继承父类扩展父类的功能 通过接口继承多个接口扩展接口的功能 通过抽象类实现接口扩展抽象类的功能 多态: 主要体现: 1.方法的重载与覆写  2.对象的多态性:a)向上转型:父类 父类对象 = 子类实例 ----------调用子类的覆写后的方法   b)向下转型:子类 子类对象=(子类)父类实例 3.发生向下转型前必须先发生向上转型以保证有父子类关系 设计模式: 工厂设计: 代理设计:通常代理的存在是扩展真实操作的作用 适配器设计:一个接口有10个方法,我只需要5个,可以创建一个

面向对象01知识点总结

继承:是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有 继承的好处:可继承的属性和方法. 提高了代表的可维护性 提高了代码的复用性 让类与类之间产生了继承关系 继承的弊端: 类与类之间的耦合度过高 继承特点: java中类只能够单继承,不能多继承,可以多层继承 class Yy extends Object {} class Fu extends Yy{} class Zi extends Fu {} 所有的类都直接或者间接的继承了 O

C# 面向对象零碎知识点

obgect: 所有数据类型都是obgect类型: 万能类型 var :原来的变量不变,替换成var: 动态类型 dynamic :类似object,遍历需要转: is  as: 类型转换运算符: (类型)对象:强制转换,如果转换不成功,会出异常: ArrayList arr = new ArrayList(); arr.Add(); foreach(obgect o in arr) { if ( o  is  Random ) { Random r = (Random)o; Console.W

面向对象编程知识点

特性 class object 封装 继承 多态 语法 调用函数  --> 执行 -->返回结果 r1 = Role.__init__() return x342423 r1 = Role(r1,"A","Police","15000") r1.name = "A" r1.role = "Poice" r1.money = 15000 r1.buy_gun()  Role.buy_gun(r1)