Javascript学习笔记1 理解对象 属性 原型对象

深入构建加密货币价格预测系统:从数据获取到模型优化的完整指南! 🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情

属性类型

对象属性包括两种类型:数据属性和访问器属性

数据属性
包含一个数据值的位置,在这个位置可以读取和写入值。其包括4个特性:configurable(能否删除或修改,默认为true),enumerable(能否通过for-in语句返回属性,默认为true),writeable(能否修改属性的值,默认为true),value(属性值,默认为undefined)

var person = {
    name: "zjw"
};

访问器属性
不包含数据值,其包含一对儿getter和setter函数,用于读取和写入访问器属性。其包括4个特性:configurable(能否删除或修改),enumerable(能否通过for-in语句返回属性),get(读取属性时调用的函数,默认为undefined),set(写入属性时调用的函数,默认为undefiend)。在属性前面加上下划线(_)用于表示只能通过对象方法访问的属性。

var book = {
    _year: 2004,
    edition: 1
};

Object.defineProperty()
无论数据属性或是访问器属性,均可以用该方法定义或修改属性特性。该方法接受3个参数:属性所在的对象,属性名称字符串和描述符对象
对数据属性修改特性

var person = {};
Object.defineProperty(person,"name",{
    writeable: false,
    value: "zjw"
});

定义访问器属性特性

Object.defineProperty(book,"year",{
    get: function(){
        return this._year;
    },
    set: function(newValue){
        this._year = newValue;
        this.edition += newValue - 2004;
    }
});

book.year = 2005;
alert(book.edition); //2

Object.getOwnPropertyDescriptor()
使用该方法,取得给定属性的描述符,接受两个参数:属性所在的对象和要读取其描述符的属性名称

var descriptor = Object.getOwnPropertyDescriptor(book,"year");
alert(descriptor.configurable); //false

创建对象

工厂模式

function createPerson(name,age,job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job
    o.sayname = function(){
        alert(this.name)
    };
    return o;
}

var person = createPerson('zjw',29,"student");
  • 不足:没有解决对象识别问题。无法得知对象的类型

构造函数模式

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job
    this.sayname = function(){
        alert(this.name)
    };
}

var person = new Person('zjw',29,"student");
  • 没有显式的创建对象,而是直接把属性和方法赋予给了this对象
  • 没有return语句
  • 要创建实例,必须使用new操作符,表明其是构造函数(如果不使用,则与普通函数没什么两样)
//在另一个对象的作用域中调用
var o = new Object();
Person.call(o,'zjw',29,"student");  //调用Person函数,不使用new操作符
o。sayname();   //"zjw"
  • 不足:每次创建对象实例时,其方法都要重新创建一次

原型模式
每个函数都有个prototype属性,其是一个指针,指向一个对象,这个对象的用途是可以包含某种类型对象所有实例共享的属性和方法。

function Person(){
    Person.prototype.name = "zjw";
    Person.prototype.age = 29;
    Person.prototype.job = "student"
    Person.prototype.sayname = function(){
        alert(this.name)
    };
}

var person1 = new Person();
person.sayname();  //"zjw"
var person2 = new Person();
alert(person1.sayname == person2.sayname); //true

每个构造函数都有个prototype属性,该属性指向原型对象,而原型对象的constructor属性则指向构造函数

可以使用isPrototypeOf()确定原型对象的关系

Person.prototype.isPrototypeOf(person1) //true

可以使用Object.getPrototypeOf()获取某个对象的原型对象

prototype = Object.getPrototypeOf(person1);
alert(prototype.name); //"zjw"
  • 虽然可以通过实例访问到原型对象,但不能通过实例重写原型中的值
  • 当实例新添加的属性与原型对象的属性同名时,会覆盖原型对象的属性
  • 某些浏览器可以使用对象的__proto__属性访问到原型对象

使用delete可以删除实例的属性

delete person1.name

使用hasOwnProperty()方法可以检测属性存在于原型对象,还是实例

person1.hasOwnProperty("name")
  • hasOwnProperty()只对实例的属性返回true

无论属性存在于对象实例还是原型对象中,只要存在,in操作符就返回true

name in person1 //true
  • 使用for-in循坏时,返回的是所有能通过对象访问的,可枚举的(enumerated)的属性,无论存在于对象还是原型

重写原型对象

Person.prototype = {
    constructor:Person,    //重写原型对象时,会丢失constructor属性,需要将其重新指向构造函数
    name:"zjw",
    age:29,
    sayName:function(){
        alert(this.name);
    }
}

原型具有动态性,对原型对象所做的任何修改(重写原型是个例外)都能够立刻从实例上反映出来

var friend = new Person();
Person.prototype.sayHi = function(){
    alert("hi");
};
friend.sayHi();  //"hi"
  • 但当重写原型时,将会切断现有原型与实例之间的联系

所有原生引用类型(Object、Array、String等)都是在其构造函数的原型上定义的方法,但原型模式也有不足,当原型对象中具有引用型属性时,通过某个实例修改该属性,会导致所有实例的该属性发生变化(因为该属性是引用类型,所有实例的该属性都指向同一个)。因此创建自定义模式最常见的方式就是构造函数和原型模式结合

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friend = ["zjw","wxx"];
}

Person.prototype = {
    constructor:Person,
    sayName:function(){
            alert(this.name);
        }
};
  • 使用构造函数定义实例属性,使用原型定义共享属性和方法

动态原型模式
将构造函数和原型封装到构造函数中,而不是独立定义

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friend = ["zjw","wxx"];
    if (typeof this.sayName != "function"){  //判定原型是否已经初始化,保证只初始化一次原型
        Person.prototype.sayName = function(){
            alert(this.name);
        }
    }
}
  • 该种模式不能使用对象字面量重写原型,因为会切断原型和实例的联系

除此之外,还有寄生构造函数模式(工厂模式+new操作符)0和稳妥构造函数(不使用this和new),他们不依赖于原型对象。

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一) 引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。 阅读详情

相关推荐

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4557

对象的原型包含的属性及其用法1

在js中,函数也是一个对象,包含属性和方法 一.prototype属性 只要我们定义一个方法 prototype 者这个属性就已经存在了 初始值为一个对象 function person(){ } console.log(person.prototype) 二.给属性添加属性和方法 1.给通过构造函数创建的对象添加属性和方法:在函数内部通过this给...

weixin_30484247的博客 272

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2116

深入理解原型对象

原型对象 概念 我们每创建一个函数,都有一个*prototype(原型)*属性,这个属性是一个指针,指向一个对象,这个对象包含特定类型所有实例共享的属性和方法。 理解原型对象 无论什么时候,只要创建一个新函数,就会为这个函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototyp...

CloudyFish的博客 976

从注册到投稿:一步步教你完成KBS期刊的在线投稿流程(最新版)

本文详细介绍了如何完成KBS期刊的在线投稿流程,从账号注册到最终提交的全过程。特别针对初次使用Elsevier投稿系统的研究者,提供最新版系统的操作指南,包括投稿要求、文件格式、作者信息管理等关键步骤,帮助研究者顺利投稿至这一人工智能领域的知名期刊。

egg99的博客 1600

ADRC自抗扰控制:工程抗扰“黑科技”,附C代码实战!

自抗扰控制(ADRC)是一种革新性的强鲁棒控制策略,通过主动估计和补偿系统扰动,无需精确数学模型即可实现优异控制性能。本文详细解析ADRC三大核心组件:跟踪微分器(TD)实现指令柔化,扩张状态观测器(ESO)实时估计总扰动,非线性状态反馈(NLSEF)完成动态补偿。针对二阶系统,文章提供完整的参数设计方法和C语言实现框架,包括关键函数fhan和fal的代码实现。ADRC将复杂对象"线性化"为积分器串联系统,显著提升抗扰能力,特别适用于电机控制、飞行器姿态等存在模型不确定性和强干扰的场景。

技术工作者 1736

javascript中对象在OOP方面的一些知识(主要是prototype和__proto__相关)

在ES6的Class到来之前,先总结下个人对js中prototype属性的理解。 1、构造函数(大写函数名 this 无return) 2、原型对象(函数.prototype) 3、实例对象( new出来的东西obj ) 备注:本文举例子都以Fn作为构造函数 Fn.prototype作为原型对象 实例对象obj = new Fn()   构造函数中的this是指...

weixin_30278237的博客 154

报错:subprocess.CalledProcessError: Command ‘[‘where‘, ‘cl‘]‘ returned non-zero exit status 1.

右键此电脑--属性--高级系统设置--环境变量--系统变量--找到Path。Enterprise是企业版,如果你是社区版就找Community。2.安装的时候,c++桌面那个需要勾选。

2301_77554343的博客 1507

JavaScript继承、属性检测及遍历

原型回顾 上次讲原型和原型链,对比Java中的继承和重写其实不难理解,原型是function对象的一个属性,它定义了构造函数构造出的对象的公共祖先,由构造函数产生的对象,可以继承对应原型的属性和方法,原型也是对象。 原型链就是把原型串起来,在原型上面再加一个原型,再加一个原型,使用__proto__连接各个原型。 还学到了原型链的增删改查,一般情况下不能通过后代改父代,但要注意可以修改的情况。见前...

HuiDT 570

英飞凌 AURIX TC3XX 系列单片机的链接文件

这篇介绍英飞凌 AURIX TC3XX 系列单片机的链接文件,主要是针对使用 SOTA 功能如何修改链接文件,完整地实现 SOTA 功能

大橙子的博客 4385

Android16 rk3576添加触摸点数上限到40个点

本文介绍了在Android 16系统上实现40点触摸支持的修改方案。相比Android 15,Android 16对API添加有更严格的要求,需要在MotionEvent.java中添加@FlaggedApi批注。主要修改包括:1)在input_framework.aconfig中定义flag;2)在MotionEvent.java中添加40个AXIS_GENERIC轴常量并添加批注;3)将32位指针ID处理改为64位适配;4)更新相关API文档。修改涉及多个核心文件,包括PointerController

tzj1058756809的博客 382

原型、对象属性以及原型链

想了解实例、构造函数、原型之间的关系可以参考红宝书原型部分 用一张别人那里拿的图表示 每个函数都有一个prototype(原型)属性 prototype属性是一个指向对象的指针,被指向的对象即是原型对象 原型对象包含可以由特定类型的所有实例共享的属性和方法,简单说在原型对象上定义的属性方法在实例中是共享的 最有意思的是在原型对象中会自动获得constructor(构造)属性,此属性...

dk123sw的博客 435

基于深度学习的野生菌菇检测识别分类系统(YOLOv8 + UI界面 + 数据集)

随着深度学习技术的迅猛发展,计算机视觉领域的应用得到了广泛的关注。野生菌菇的检测与识别是一个复杂而又有趣的问题,涉及到物体检测、图像分类以及自然语言处理等技术。本文将介绍如何基于YOLOv8模型,结合自定义UI界面与数据集,构建一个高效且精确的野生菌菇检测识别分类系统。首先,我们将介绍YOLOv8的原理与特点,然后详细描述如何构建和训练野生菌菇识别模型,并介绍如何为该系统设计UI界面,最终形成一个完整的系统。本文内容包括代码实现、模型训练及数据集准备等,旨在为有类似需求的开发者提供参考和帮助。目录摘要目录。

YOLO 1547

【JavaScript】原型对象中的 constructor 属性详解

在 JavaScript 中,每个对象都与一个原型对象相关联。这个原型对象包含了该对象的共有方法和属性。当我们调用一个对象的某个属性或方法时,JavaScript 引擎会首先在该对象自身查找。如果找不到,就会沿着原型链查找,直到找到为止。是 JavaScript 中所有对象的一个重要属性,通常指向创建该对象的构造函数。也就是说,通过某个构造函数创建的对象,其属性指向这个构造函数本身。// 输出:function Person(name) { ... }在这个例子中,person1对象是通过。

lph159的博客 4150

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JS中关于原型对象的理解

JS中关于原型对象的理解原型对象prototype举例解释以上四点 原型对象prototype 每个函数都有prototype,该属性指向原型对象(显式原型对象) 每个实例都有_proto_属性,该属性指向原型对象(隐式原型对象) 构造函数的显示原型对象===当前构造函数实例对象的隐式原型对象 原型对象的本质:普通的Object对象,非函数对象 所有函数都是new Function产生的,包括Function自己 举例解释以上四点 // 以该函数为例 function Foo(){} var foo =

NumbSilver的博客 2991

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深入理解 JavaScript 的原型对象 `prototype`

prototypeJavaScript 的原型对象prototype是实现继承和共享方法的重要机制。通过原型链,我们能够共享方法和属性,避免重复定义,并且能够实现面向对象编程中的继承机制。理解原型及原型链的工作原理,是深入掌握 JavaScript 面向对象编程的关键。构造函数的prototype:每个函数都拥有一个prototype属性,指向该构造函数的原型对象。原型链:对象可以通过原型链继承父类的方法和属性。继承:通过修改prototype,我们可以实现继承关系。属性:每个对象都有一个。

m0_62599305的博客 1069

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

关于JavaScript的Prototype及原型对象的理解

prototype,原型对象是学习javascript的基础。了解prototype,运用原型对象可以写出更好的面向对象设计的代码

long的博客 2164

【JavaScript】原型对象 (prototype) 详解

在 JavaScript 中,每个对象都有一个内置属性,称为(在一些实现中被访问为__proto__),它指向另一个对象,这个对象就是该对象的原型(prototype)。当访问对象的属性或方法时,如果该对象本身没有定义该属性或方法,JavaScript 引擎就会沿着原型链去寻找,直到找到为止。原型链是一种机制,它将对象串联起来,形成了一条查找路径。JavaScript 的原型对象prototype是其继承机制的核心。

lph159的博客 1687

JavaScript 原型对象和原型链理解

一个例子让你彻底明白原型对象和原型链 1. 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述。有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解。最近正在读《Javascript高级程序设计》,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明。 我们经常会这么写 function Person () { this.name = 'John'; } var pers

annwyna的博客 1368

JS中的原型对象

OK,这一篇我们来说一下原型的这个问题。 1.理解原型对象 也是面试中比较常见的问题,我们结合实际来说一下,JS中的原型到底是做什么的。 无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。 在默认情况下,所有原型对象会自动获得一个constructor属性,这个属性指向prototype属性所在函数的指针。 当用构造函数创建一个新实例后,该实例的内部包含一个属性(__proto __),指向该构造函数的原型对象。 那我们来举个例

weixin_46726346的博客 2521

JS原型对象--Prototype

原型对象是JS实现继承和方法共享的基础。通过理解原型链、构造函数的。

buzhidaowobuhui的博客 1582

js原型对象和原型链理解

参考:https://blog.youkuaiyun.com/yucihent/article/details/79424506 一. 函数对象 所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型) 所有函数拥有prototype属性(显示原型)(仅限函数) var a = {}; console.log(a.prototype); //undefined c...

qq_43553067的博客 1548

怎么理解js的原型对象

1.所有对象都有原型对象。 2.原型对象,就是其它语言中的类中的静态属性和静态方法,总是是静态-static就对了.原理是: 内存中只有一份. 内存中的图解: 先写个构造器: function Person(name, age) { this.name = name; this.age = age; } var A = new Person('A', 18); var B = new Person('B', 28);...

u010227042的博客 727

JS原型、原型对象的理解

JS原型、原型对象的理解 原型: 原型(prototype)是每个函数都具有的一个属性,本质上是一个指针,指向的是函数的原型对象。 例如: function Person(Name){ this.name=Name } Person.prototype//可以查看当前Person函数的原型对象。 原型对象 函数中的protype属性所指向的对象,这个对象的用途就是可以指定特定类型的所有实例共享的一个方法和属性,我们不必在构造函数声明一个对象实例的信息。 例如: function Person(){

qq_40026070的博客 541

彻底理解js中的原型对象和prototype属性

prototype(函数的原型属性) prototype 是一个指向该实例所使用的原型对象的【指针】 prototype 是几乎所有的函数(除了某些内建函数)的属性 prototype 不是一个实例的属性,因为实例是对象,不是函数 //prototype是函数的属性 console.log(Array.prototype.reduce.prototype);//undefined consol...

龙旗飘扬的舰队 1180

javascript原型对象、构造函数和实例对象

大家都知道,javascript中其实并没有类的概念。但是,用构造函数跟原型对象却可以模拟类的实现。在这里,就先很不严谨的使用类这个词,以方便说明。 下面整理了一些关于javascript的构造函数、原型对象以及实例对象的笔记,有错误的地方,望指正。 先用一张图简单的概括下这几者之间的关系,再细化: 构造函数和实例对象 构造函数是类的外在表现,构造函数的名字通常用作类名。 其实构

neverland-7 3995
上一篇: SQL学习笔记9 流程控制 权限操作
下一篇: Javascript学习笔记2 继承 原型链
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值