9.2 操作对象

2024-04-21 14:48
文章标签 操作 对象 9.2

本文主要是介绍9.2 操作对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、三个对象特性

  • 对象的原型(prototype):指向另外一个对象,本对象的属性继承自它的原型对象
  • 对象的类(class):是一个标识对象类型的字符串
  • 对象的扩展标记(extensible flag):指明了是否可以向该对象添加新属性

二、引用对象

  • 通过把对象的地址赋值给变量,实现变量对对象的引用。
  • 当把变量赋值给其他变量,则实现多个变量引用同一个对象。
  • 删除变量,只是删除变量对对象的引用,对象仍然存在

1.示例

        o={x:1,y:true}ol=o;alert(delete o); //删除变量,返回值为true,说明删除成功alert(ol.x);//读取对象内数据,显示为1,说明对象仍然存在alert(o.x);//使用o读取对象内的数据,提示没有定义对象

三、复制对象

  • 设计思路:利用for/in语句遍历对象成员,然后逐一复制给另一个对象

1.复制方法封装使用

       function F(x,y){this.x=x;this.y=y;this.add=function(){return this.x+this.y;}}//构造函数Function.prototype.extend=function(o){for(var i in o){this.constructor.prototype[i]=o[i];//this关键字指代当前示例对象,即本示例中的变量o;constructor属性指向它的构造器;prototype属性指向构造函数的原型对象。}}//该封装函数通过为Function类型对象拓展一个方法,该方法能够把指定的参数对象完全复制给当前对象(变量o)的构造函数的原型对象。var o = function(){};//创建空的构造函数o.extend(new F(2,3));//复制对象,该extend方法只能为构造函数结构复制对象

2.该复制方法的缺点

复制操作实际上是通过反射机制复制对象的所有可枚举属性和方法来模拟继承

  • 由于是反射机制,复制法不饿能继承非枚举类型的方法。对于系统核心对象的只读方法和属性也是无法继承的。
  • 通过反射机制来复制对象成员的执行效率会非常差。当对象结构越庞大时,这种低效越明显
  • 如果包含同名成员,这些成员可能会被动态复制所覆盖。

四、克隆对象
1.代码

       Function.prototype.clone=function(o){ //对象克隆方法function Temp(){}; //新建构造函数Temp.prototype=o; //把参数对象赋值给构造函数的原型对象return new Temp();//返回实例化后的对象}var o=Function.clone(new F(2,3));//调用Function对象的克隆方法

2.克隆对象的优点

  • 比起复制对象的方法,更高效

五、销毁对象

  • 当对象没有被任何变量引用时,JavaScript会自动侦测,并运行垃圾回收程序把这些对象注销,一释放内存。
  • 当把对象的所有引用变量设置为null时,可以强制对象处于废除状态,并被回收。
var o={};
o=null;
alert(o.x);//提示系统错误,找不到对象

这篇关于9.2 操作对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923339

相关文章

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

GitHub每周最火火火项目(9.2-9.8)

项目名称:polarsource / polar 项目介绍:polar 是一个开源项目,它是 Lemon Squeezy 的替代方案,并且具有更具优势的价格。该项目的目标是为开发者提供一种更好的选择,让他们能够在追求自己的热情和兴趣的同时,通过编码获得相应的报酬。通过使用 polar,开发者可以享受到更实惠的价格,同时也能够更自由地发挥自己的创造力和技能。 项目地址:https://github.

PHP7扩展开发之对象方式使用lib库

前言 上一篇文章,我们使用的是函数方式调用lib库。这篇文章我们将使用对象的方式调用lib库。调用代码如下: <?php $hello = new hello(); $result = $hello->get(); var_dump($result); ?> 我们将在扩展中实现hello类。hello类中将依赖lib库。 代码 基础代码 这个扩展,我们将在say扩展上增加相关代码。sa

PHP7扩展开发之流操作

前言 啥是流操作?简单来讲就是对一些文件,网络的IO操作。PHP已经把这些IO操作,封装成流操作。这节,我们将使用PHP扩展实现一个目录遍历的功能。PHP示例代码如下: <?phpfunction list_dir($dir) {if (is_dir($dir) === false) {return;} $dh = opendir($dir);if ($dh == false) {ret