iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >JavaScript原型对象怎么用
  • 200
分享到

JavaScript原型对象怎么用

2024-04-02 19:04:59 200人浏览 安东尼
摘要

这篇文章主要介绍“javascript原型对象怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript原型对象怎么用”文章能帮助大家解决问题。你理解

这篇文章主要介绍“javascript原型对象怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript原型对象怎么用”文章能帮助大家解决问题。

JavaScript原型对象怎么用

你理解的类?类的特性有哪些?(封装,继承,多态)

类实际是一个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法也由两个组成部分:类声明和类表达式。类的主体都是在严格模式下执行的。

类的类体是由一对花括号{}中的部分,这是定义类成员的位置。【成员主要是方法或者构造函数】

类的所有方法都等价于是定义在类的prototype属性上。在类的实列上调用方法,等同于在调用原型上的方法。

class A(){
    constructor(){}
    a(){}
    b(){}
}
//等价于
A.prototype={constructor(){},a(){},b(){}}

组成:

  • 构造函数:

constructor方法是一个特殊的方法,这种方法用于创建和初始化一个由class创建的对象。一个类只能有一个构造函数,如果多个会报错,如果没有会默认添加一个空的constructor。其中constructor默认返回实列对象【即this】。一个构造函数可以使用super关键字来调用一个父类的构造函数。

  • 属性

  • 原型方法:该方法不需要加上function关键字,直接把函数的定义放进去就可以了。方法和方法之间不能用逗号分隔,会报错。

  • 静态方法:使用static定义静态方法,调用静态方法,不能类的实列去调用,只能使用类去调用。

  • 取值函数getter和存值函数setter:在类中使用get和set关键字,对某个属性设置存值和取值函数,拦截该属性的存取行为。

类语法:

  • 类声明:使用class关键字

class Rectangle{
    constructor(height,width){
        this.height=height;
        this.width=width;
    }
}

注意:函数声明和类声明的区别:类声明不会提升,函数声明会提升。

类表达式:类表达式可以是被命名的或匿名的。赋予一个命名类表达式的名称是类的主体的本地名称。

 let Rectangle=class{//匿名类
      constructor(height,width){
            this.height=height;
            this.width=width;
        }
 }
 let Rectangle= class Rectangle{//命名类
      constructor(height,width){
            this.height=height;
            this.width=width;
        }
 }

使用extends创建子类:

extends关键字在类声明或类表达式中用于创建一个类作为另一个类的子类。

使用super调用超类:

super关键字用于调用对象的父对象上的函数

类的特性:

-  封装:主要是通过函数,私有属性和方法的设置主要是通过块级作用域实现

-  多态:可以通过函数调用,因为参数是可以多变的

-  继承:主要通过原型链

当我们在new一个普通函数时候,发生了什么?

  • 以构造器的 prototype 属性(注意与私有字段 [[prototype]] 的区分)为原型,创建新对象;

  • 将this 和调用参数传给构造器,执行;

  • 如果构造器返回的是对象,则返回,否则返回第一步创建的对象。

new 这样的行为,试图让函数对象的语法跟类变得相似,但是,它客观上提供了两种方式,一是在构造器中添加属性,二是在构造器的 prototype 属性上添加属性。

new后面的函数名一定要大写吗?

不是,主要是为了便于区分类。一般约束为大写

如何理解ProtoType?查找一个对象的某个属性的过程?

prototype:

每个函数都有一个特殊的属性叫做原型对象【prototype】

js是基于原型的语言,每个对象都拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。这些属性和方法时定义在对象的构造函数之上的prototype属性上,而非对象的实例本身。

原型对象可以再拥有原型对象,并从中继承方法和属性,一层一层,层层向上直到一个对象的原型对象为 null,这种就是原型链。

创建对象实例时,对象的实例和它的构造器之间建立一个链接【__proto__属性,是从构造函数的prototype属性派生的。也就是__proto__与构造函数的prototype是指向同个对象】Object.getPrototypeof(new Foobar())和Foobar.prototype是相等的。

Object.create()。是从指定的原型对象,创建一个新对象。var newObj=Object.create(obj)。则newObj的__proto__=obj

每个实列对象都从原型中继承了一个constructor属性。该属性指向了构造此实例的构造函数。

一般都是构造器中定义属性,在prototype定义方法。

一般由构造函数实列化出一个新对象,新对象的原型对象是一个constructor和一个Object的原型对象组成。而函数构造函数的原型对象是也是由另外一个constructor和一个Function的原型对象组成。

    var F=function(){};
    Object.prototype.a=function(){};
    Function.prototype.b=function(){};
    var f=new F();
    //上面的结果是,f能取到a,不能取到b.
    详解:
        1.f.__proto__===F.prototype
        2.F.prototype.__proto__===Object.prototype(所以f可以访问a)
        3.f.constructor===F
        4.F.__proto__===Function.prototype(所以f.constructor.b可以访问)

查找属性的过程:

1.先查找自己身属性是否由包含该属性。

2.如果没有,才会沿着原型链,层层向上搜索,直到找到名字的属性

3.如果找到最后原型链的末尾,即最后的原型为null,那就是没有找到该属性。就会返回undefined

不同方法创建对象和原型链

1.使用语法结构创建对象

var o = {a: 1};
// o 这个对象继承了 Object.prototype 上面的所有属性
// o 自身没有名为 hasOwnProperty 的属性
// hasOwnProperty 是 Object.prototype 的属性
// 因此 o 继承了 Object.prototype 的 hasOwnProperty
// Object.prototype 的原型为 null
// 原型链如下:
// o ---> Object.prototype ---> null
var a = ["yo", "whadup", "?"];
// 数组都继承于 Array.prototype 
// (Array.prototype 中包含 indexOf, forEach 等方法)
// 原型链如下:
// a ---> Array.prototype ---> Object.prototype ---> null
function f(){
return 2;
}
// 函数都继承于 Function.prototype
// (Function.prototype 中包含 call, bind等方法)
// 原型链如下:
// f ---> Function.prototype ---> Object.prototype ---> null

2.使用构造函数创建对象

function A() {
this.a = 1;
this.b = 2;
}
A.prototype = {
write: function(){
    console.log(this.a);
}
};
var a = new A();
// a 是生成的对象,他的自身属性有 'a' 和 'b'。

3.使用Object.create()创建对象(ES5)

var a = {a: 1}; 
// a ---> Object.prototype ---> null
var b = Object.create(a);
// b ---> a ---> Object.prototype ---> null
console.log(b.a); // 1 (继承而来)
var c = Object.create(b);
// c ---> b ---> a ---> Object.prototype ---> null
var d = Object.create(null);
// d ---> null
console.log(d.hasOwnProperty); // undefined, 因为d没有继承Object.prototype
使用

4.使用class创建对象(es6)

class A {
constructor(a, b) {
    this.a = a;
    this.b = b;
}
}
class B extends A {
constructor(a,b,c) {
    super(a, b);
    this.c=c;
}
get ab() {
    return this.a + this.b;
}
set d(d) {
    this.a = d;
    this.b = d;
    this.c = d;
}
}
var a= new A('a','b');//a的原型对象是 A.prototype
var b = new B('a','b','c');//    //b的原型对象是 B.prototype

当一个对象设置属性时都发生了什么?

如果对象包含普通数据访问属性,直接赋值只会修改属性值

var a={b=1}//因为b是a的普通属性,数据类型为Number

a.b="a";  //直接更改b的类型为String,且赋值为'a'.

如果对象找不到该属性,且原型链也找不到,就直接默认添加一个属性到该对象上。

var a={}//b不是a的普通属性,且原型链上也没有

a.b="a";  //直接在a上添加b的类型,为String,且赋值为'a'.

如果属性b,存在于原型链上

//在原型链上层存在名为b的普通数据访问属性并且没有标记为只读(writable:false),那就会直接在a中添加一个名为b的新属性,且值为'a'。而原型链上的b就会被屏蔽掉:

    function A(){};
    A.prototype.b=1;
    var a=new A();
    a.b='a';

//在原型链上层存在b,但是他被标记为只读,那么无法修改已有属性,或者在a中创建屏蔽属性。如果运行在严格模式下,代码会抛出一个错误,否则,这条赋值语句会被忽略,总之,不会发生屏蔽。

    function A(){
    };
A.prototype.b=1
    Object.defineProperty(A.prototype,'b',{
        configurable:true,
        writable:false
    })
    var a=new A();
    a.b='a';//结果a.b还是1

关于“JavaScript原型对象怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网html频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: JavaScript原型对象怎么用

本文链接: https://www.lsjlt.com/news/88305.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript原型对象怎么用
    这篇文章主要介绍“JavaScript原型对象怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript原型对象怎么用”文章能帮助大家解决问题。你理解...
    99+
    2024-04-02
  • Javascript中对象原型 __proto__有什么用
    这篇文章主要为大家展示了“Javascript中对象原型 __proto__有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Javascript中对象原型 __proto__有什么用”这篇...
    99+
    2023-06-20
  • JavaScript如何使用对象作为对象的原型
    这篇文章主要为大家展示了“JavaScript如何使用对象作为对象的原型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何使用对象作为对象的...
    99+
    2024-04-02
  • javascript中原型对象this的原则是什么
    小编给大家分享一下javascript中原型对象this的原则是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!原则只有当调用这个函数时,才能确定构造函数中的this指向谁。一般来说,构造函数中的this指的是函数的调用...
    99+
    2023-06-20
  • Javascript中面向对象和原型原型链是怎样的
    今天就跟大家聊聊有关Javascript中面向对象和原型原型链是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。面向对象理论知识总述* 核心答案...
    99+
    2024-04-02
  • JavaScript的原型对象与原型链实例分析
    本篇内容介绍了“JavaScript的原型对象与原型链实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、prototype和__pr...
    99+
    2023-07-02
  • 怎么理解JS原型、原型链、对象
    本篇内容主要讲解“怎么理解JS原型、原型链、对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解JS原型、原型链、对象”吧! 一. 普通对象与函...
    99+
    2024-04-02
  • JavaScript中怎么将对象转换为原始类型
    这篇文章将为大家详细讲解有关JavaScript中怎么将对象转换为原始类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。说明将原始类型的对象转换为内置的[ToPrimitive]函数。使用S...
    99+
    2023-06-20
  • Javascript ES6中对象类型Sets怎么用
    这篇文章主要介绍Javascript ES6中对象类型Sets怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!介绍ECMAScript 6(以下简称ES6)是JavaScript...
    99+
    2024-04-02
  • JavaScript 原型链:对象继承的魔力
    JavaScript 原型链是一种对象继承机制,它允许对象访问和继承其他对象的属性和方法。这种机制使得 JavaScript 能够实现面向对象编程,并创建出复杂的对象层次结构。 在 JavaScript 中,每个对象都有一个原型对象,原...
    99+
    2024-02-06
    JavaScript 原型链 对象继承 原型 继承 属性 方法
  • JavaScript 原型链揭秘:了解对象的继承和原型
    原型链是 JavaScript 中的一种继承机制,它允许对象从其原型对象继承属性和方法。通过原型链,对象可以访问其原型对象的所有属性和方法,甚至包括那些它自己没有定义的属性和方法。 原型链是如何工作的? 每个 JavaScript 对象...
    99+
    2024-02-06
    JavaScript 原型链 继承 原型 对象
  • JavaScript 原型链:连接对象的纽带
    原型链是一种连接对象并允许它们继承属性和方法的机制。它有助于代码重用和提高性能。 原型链是一条从子对象指向父对象的引用链。每个对象都有一个原型对象,原型对象也有一个原型对象,依此类推,直到顶层的 Object 对象。当一个对象访问一个属性...
    99+
    2024-02-06
    JavaScript, 原型, 继承, 属性, 方法
  • 三张图带你搞懂JavaScript的原型对象与原型链
    对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__proto__混淆,二来它们之间的各种指向实在有些复杂,其实市面上已经有非常多的文章在...
    99+
    2024-04-02
  • 带你彻底理解JavaScript中的原型对象
    目录一、什么是原型1.1 函数的原型对象1.2 使用构造函数创建对象二、与原型有关的几个属性和方法2.1 prototype属性2.2 constructor属性2.3 __prot...
    99+
    2024-04-02
  • JavaScript原型链中函数和对象的理解
    目录__ proto__prototype.__ proto__理解__ proto__ 最近在看高程4,原型链肯定是绕不过的,本瓜之前一直认为,只要记住这句话就可以了: 一个对象的...
    99+
    2024-04-02
  • 详解JavaScript原型对象的this指向问题
    目录一、this指向二、修改this指向1、call()方法2、apply()方法总结 一、this指向 构造函数中的this 指向实例对象。那么原型对象this的指向呢? 如下:...
    99+
    2024-04-02
  • JavaScript 原型链:解开对象继承的奥秘
    JavaScript 原型链是理解对象继承的关键概念,它提供了一种在对象之间共享属性和方法的方式,从而实现代码的可重用性和维护性。原型链的概念对于理解 JavaScript 中的对象继承非常重要,它允许对象继承来自其原型的属性和方法,并可...
    99+
    2024-02-06
    JavaScript 原型链 对象继承 属性 方法
  • JavaScript对象内置对象,值类型和引用类型讲解
    目录对象对象的定义遍历对象的成员JS内置对象Math对象Date对象数组对象String对象值类型和引用类型对象 JS中的对象是属性和行为的结合体,其中属性是对象的静态特征,行为又称...
    99+
    2024-04-02
  • 怎么判断JavaScript中对象的类型
    这篇“怎么判断JavaScript中对象的类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么判断JavaScript中对...
    99+
    2023-07-04
  • 什么是javascript的对象类型
    本篇内容介绍了“什么是javascript的对象类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作