本篇来说一下js中的属性:

1、静态属性

2、原型属性

3、实例属性

静态属性:

  1. function klass(){}
  2. var obj=new klass();
  3. klass.count=0;
  4. klass.count++;
  5. console.log(obj.count);//undefined
  6. console.log(klass.count);//1

静态属性存在于对象中。它的访问方式只有:类名.count 一种方式,无法通过实例访问。

如:Math.PI

原型属性:

在讲解原型属性之前有必要先提一下new操作符:
     ①:var obj=klass()和②:var obj=new klass()的结果显然是不同的。
     ①的操作仅仅是简单的调用klass函数,然后把klass函数的返回值赋给obj变量。
     ②所做的操作是:调用构造函数klass,创建一个包含prototype内部指针的新对象obj。

直观看来:使用new操作符是创建该类的实例对象,而不使用new操作符则是直接调用函数。

好了,下面继续看原型属性:

原型属性又称公共属性,它不属于某个类的实例,而是直接属于某个类。

  1. function klass(){}
  2. var obj=new klass();
  3. klass.prototype.count=0;
  4. klass.prototype.count++;
  5. console.log(klass.prototype.count);//1
  6. console.log(obj.count);//1

原型属性存在类的原型之中。它的访问方式有两种:

1、类名.prototype.count

2、实例对象.count

第二种访问方式的原理是:

首先在实例对象中查找,如果找到则立即返回,否则在原型(原型链)中查找(因为new操作符创建的对象包含了一个prototype的内部指针,所以可以向上追溯,查找属性),找到则返回相应的值,否则返回undefined。

所以obj.count的方式实际操作的是klass.prototype.count属性。

再看下面的例子:

  1. function klass(){}
  2. var obj=new klass();
  3. klass.prototype.count=0;
  4. klass.prototype.count++;
  5. obj.count++;
  6. console.log(klass.prototype.count);//1
  7. console.log(obj.count);//2
 

与上面不同的是仅仅加了一句obj.count++;按照属性查找的原理,obj中并不存在count属性,所以他会在原型链中查找count属性,返回klass.prototype.count。

obj.count++即可拆分为更加直观的:obj.count=klass.prototype.count+1;可以看出这一句话是简单的赋值也是属性定义:

首先给obj定义了一个实例属性count,再将klass.prototype.count+1的结果赋值给obj.count。

所以klass.prototype.count的结果为1,obj.count的结果是2。

以上便是要讲解的第三者属性:实例属性。

实例属性是公开的(public),可以通过类的实例(或this.)直接访问和修改它。也就是归属实例所有。

明白了相应的概念,我们再来讲一下他们各自的使用场合,看下面的例子:

  1. function klass(id){
  2. this.id=id;
  3. }
  4. klass.Uid=1;
  5. klass.prototype.names=[];
  6. var obj1=new klass("obj1");
  7. var obj2=new klass("obj2");
  8. obj1.names.push(obj1.id);
  9. klass.Uid++;
  10. obj1.names.push(obj2.id);
  11. klass.Uid++;
  1. console.log(obj1.id);//obj1
  2. console.log(obj2.id);//obj2
  3. console.log(klass.prototype.names);//obj1 , obj2
  4. console.log(klass.Uid);//3





他们的应用场合显而易见,静态属性是全局的,原型属性是实例公有的,实例属性是各个实例所独有的。

js的属性篇基本就到此结束,有疑问或错误之处欢迎指出,请大家多多赐教。

js-静态、原型、实例属性的更多相关文章

  1. JS入门系列(2)-原型-实例属性

    下面的例子中,在构造器内部定义了like,然后再原型上也定义了like.通过下面的测试表明: 在构造器内部创建的实例方法会阻挡原型上定义的同名方法 初始化操作的优先级如下: 首先,通过原型给对象实例添 ...

  2. Vue.js Cookbook: 添加实例属性; 👍 axios(4万➕✨)访问API; filters过滤器;

    add instance properties //加上$,防止和已经定义的data,method, computed的名字重复,导致被覆写.//可以自定义添加其他符号. Vue.prototype. ...

  3. js静态属性,实例属性,封装性,prototype,__proto__综合解析

    原创作品,转载请注明来源,sogeisetsu,我的csdn上也有这篇文章csdn js静态属性,实例属性,封装性,prototype,__proto__综合解析 下面是我在写博客的源代码,您可以先不 ...

  4. JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程

     壹 ❀ 引 Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,遗憾的是我在19年才遇到,比较奇妙的是现在仍有公司会使用这道题.相关解析网上是有的,这里我站在 ...

  5. JS中的实例方法、静态方法、实例属性、静态属性

    一.静态方法与实例方法的例子: 我们先来看一个例子来看一下JS中的静态方法和实例方法到底是什么? 静态方法: function A(){} A.col='red'  //静态属性 A.sayMeS=f ...

  6. js实例属性和原型属性

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <t ...

  7. js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)

    js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...

  8. js判断对象的属性是原型的还是实例的

    一些情况下,我们需要知道对象的属性是原型的还是实例的,如果看代码的话比较繁琐,下面讲解下如何可以直接判断 1.hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的 ...

  9. JS 之原型,实例,构造函数之间的关系

    JS是面向对象的语言,函数也是对象.下面大致介绍下实例,原型与构造函数之间的关系. 构造函数模式 function Person(name,age){ this.name = name; this.a ...

随机推荐

  1. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  2. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  3. ThreadLocal简单理解

    在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...

  4. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理

    系列目录 前言 本节主要是关注者(即用户)和用户组的管理,微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号也提供了相应的接口 ...

  6. 如何远程关闭一个ASP.NET Core应用?

    在<历数依赖注入的N种玩法>演示系统自动注册服务的实例中,我们会发现输出的列表包含两个特殊的服务,它们的对应的服务接口分别是IApplicationLifetime和IHostingEnv ...

  7. 来吧,HTML5之基础标签(上)

    什么是html5 HTML 5 是下一代的 HTML.HTML5 仍处于完善之中.然而,大部分现代浏览器已经具备了某些 HTML5 支持. 学习过程中标签的理解 <a>标签  定义超链接, ...

  8. [转]Patch文件结构详解

    N久不来 于是不知道扔在哪儿于是放这里先 如果你觉得碍事的话 帮我扔到合适的版块去.. 导读这是一篇说明文 它介绍了标准冒险岛更新文件(*.patch;*.exe)的格式文章的最后附了一段C#的参考代 ...

  9. Web安全相关(四):过多发布(Over Posting)

    简介 过多发布的内容相对比较简单,因此,我只打算把原文中的一些关键信息翻译一下.原文链接如下: http://www.asp.net/mvc/overview/getting-started/gett ...

  10. 分享两种实现Winform程序的多语言支持的解决方案

    因公司业务需要,需要将原有的ERP系统加上支持繁体语言,但不能改变原有的编码方式,即:普通程序员感受不到编码有什么不同.经过我与几个同事的多番沟通,确定了以下两种方案: 方案一:在窗体基类中每次加载并 ...