用了javascript这么久由于没有系统学习过基础,总是拿来主义. 所以对一些基础知识还是搞不清楚很混乱. 今天自己做个小例子,希望彻底能搞清楚.

注释中对象只例子的对象本身,原型只原型继承对象的新对象.

 1 /**
2 * Created by Feng Huang on 10/10/2015.
3 */
4
5 function Obj(arg){
6 var a = arg; //对象的私有变量 对象和原型都不能访问
7 var fn = function(){}; //对象的私有函数 对象和原型都不能调用
8
9 this.b = arg; //原型的公有变量 原型能访问对象自己不能访问 [这种其实很容易理解出错的. 对象本身竟然不能调用但原型却可以.] 一直以为这种是对象自己也是可以调用的属性
10 this.fn1 = function(){}; //原型的公有函数 原型能调用对象自己不能访问
11 }
12
13 Obj.c = 1; //对象的公有变量 对象能访问原型不能
14 Obj.fn2 = function(){}; //对象的公有函数 对象能调用原型不能
15
16 Obj.prototype.d = 11; //原型的属性 对象本身访问不到
17 Obj.prototype.fn3 = function(){}; //原型的方法 对象本身访问不到
18
19
20 console.log("Obj.a = "+Obj.a);
21 console.log("Obj.fn = "+Obj.fn);
22 console.log("Obj.b = "+ Obj.b);
23 console.log("Obj.fn1 = "+ Obj.fn1);
24 console.log("Obj.c = "+ Obj.c);
25 console.log("Obj.fn2 = "+Obj.fn2);
26 console.log("Obj.d = "+ Obj.d);
27 console.log("Obj.fn3 = "+Obj.fn3);
28
29 console.log("--------------------------------------");
30
31 var A = new Obj(22);
32 console.log("A.a = "+A.a);
33 console.log("A.fn = " +A.fn);
34 console.log("A.b = "+ A.b);
35 console.log("A.fn1 = "+A.fn1);
36 console.log("A.c = "+A.c);
37 console.log("A.fn2 = "+A.fn2);
38 console.log("A.d = "+A.d);
39 console.log("A.fn3 = "+A.fn3);

结果==>

Obj.a = undefined
Obj.fn = undefined
Obj.b = undefined
Obj.fn1 = undefined
Obj.c = 1
Obj.fn2 = function (){}
Obj.d = undefined
Obj.fn3 = undefined
--------------------------------------
A.a = undefined
A.fn = undefined
A.b = 22
A.fn1 = function (){}
A.c = undefined
A.fn2 = undefined
A.d = 11
A.fn3 = function (){}

总结:

第一种方式

function Obj(arg){
var a = arg; //对象的私有变量 对象和原型都不能访问
var fn = function(){}; //对象的私有函数 对象和原型都不能调用
}

声明后 不管对象本身还是原型继承对象后的子类都没办法直接访问.

**************************************************************

第二种方式

function Obj(arg){
this.a = arg; //对象的私有变量 对象和原型都不能访问
this.fn = function(){}; //对象的私有函数 对象和原型都不能调用
}

第四种方式

function Obj(arg){
}
Obj.prototype.d = 11; //原型的属性 对象本身访问不到
Obj.prototype.fn3 = function(){}; //原型的方法 对象本身访问不到

第二和第四种方式放在一起都是原型继承对象后的子类可以访问到,但是原对象本身访问不到.

*****************************************************************

第三种方式

function Obj(arg){
}
Obj.c = 1; //对象的公有变量 对象能访问原型不能
Obj.fn2 = function(){}; //对象的公有函数 对象能调用原型不能

对象本身扩展后方法和属性,继承对象后的原型访问不到.

第1,3,4种方法很好理解. 第2种方法对象本身不能直接访问闭包内的变量能够理解. 但是使用关键字this后继承对象的原型就可以调用这些属性和方法值得深入研究. 关键字this的特性.

this是指向对象原型new之后新创建的对象而不是对象自己本身. this === new self() === _proto_

javascript对象的属性,方法,prototype作用范围分析.的更多相关文章

  1. 275 原型与原型链:显式原型prototype ,隐式原型__proto__,隐式原型链,原型链_属性问题,给原型对象添加属性/方法

    1.所有函数都有一个特别的属性 prototype : 显式原型属性 [普通构造函数的实例对象没有prototype 属性,构造函数有__proto__属性,原型对象有__proto__属性 ] 2. ...

  2. js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

    __proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性 ...

  3. 创建JAVASCRIPT对象3种方法

    创建JAVASCRIPT对象3种方法 方法一:直接定义并创建对象实例 var obj = new Object();    //创建对象实例 //添加属性obj.num = 5;   //添加属性 o ...

  4. javascript对象事件绑定方法

    javascript对象事件绑定方法 今天在做对象事件绑定的过程中出现了一点异外情况,由于事件方法是由参数传过来的,需要将当前对象call过去,方便方法体里直接调用this 错误写法 obj.oncl ...

  5. javaScript 对象的hasOwnProperty方法打印window自定义属性

    for (var name in window) { if (window.hasOwnProperty(name)) { window.console.log ( name + " : & ...

  6. JavaScript 对象 - 与属性的相关知识

    function inherit(p){ if(p == null) throw TypeError(); if(Object.create) return Object.create(p); var ...

  7. JavaScript | 对象与属性

    ———————————————————————————————————————————— 对象:JavaScript是基于原型的语言,没有Class,所以将函数作为类 - - - - - - - - ...

  8. JavaScript对象的valueOf()方法

    js对象中的valueOf()方法和toString()方法非常类似,但是,当需要返回对象的原始值而非字符串的时候才调用它,尤其是转换为数字的时候.如果在需要使用原始值的上下文中使用了对象,JavaS ...

  9. JavaScript对象之属性标签

    本文介绍一下js对象的属性标签(configurable.writable.enumerable.value.get.set)的使用. 上图的要点为: 1.Object.getOwnPropertyD ...

随机推荐

  1. contextlib 上下文管理器

    在Python中,读写文件这样的资源要特别注意,必须在使用完毕后正确关闭它们.正确关闭文件资源的一个方法是使用try...finally: try: f = open('/path/to/file', ...

  2. k8s volume 基本类型分类

    volume 类型 静态volume emptyDir 临时空目录, 用途,pod内多用户同享一个目录.与POD的生命周期一至,POD创建时创建,删除时删除. Hostpath 宿主机1:1映射,用途 ...

  3. css3修改滚动条样式

    /*滚动条整体样式*/ /*高宽分别对应横竖滚动条的尺寸*/ .content-box::-webkit-scrollbar{ width: 4px; height: 4px; } /*滚动条里面小方 ...

  4. 二叉树的镜像(python)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  5. c++面向行的输入getline()和get()

    来源:c++ primer plus 在c++里当我们输入一个字符串时习惯用cin,但是cin只能读取一段不含空格的字符串,如果我们需要读取一段包含空格的字符串时,就需要用到getline()或get ...

  6. 【mysql】主从同步,事务等概念

    问题: mysql用binary log来保证主从同步的可靠性和安全性,在mysql中,主从同步是异步线程和异步任务来保证的. (在这点上,其它存储引擎有另外的选项,比如mongoDB和Elastic ...

  7. 【Linux 进程】fork函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  8. 联想G510安装win7系统

    1.插入系统盘重启(要按Fn+f12) 2默认下一步 3.选择自定义 4.选择需要将系统安装到的分区,格式化,然后下一步 5.默认下一步 安装到这里就成功了 6.问题处理: 第4步时出现 Window ...

  9. 再遇ibatisNet

    11年在Mr刘的带领下第一次接触ibatisnet ,当时Mr刘很详细的很讲了xml里的写法还有配置文件之类的,但是随着时间越来越久远.很多东西都开始淡忘了. 如今,再次和它相遇,依然觉得很亲切,虽然 ...

  10. AndroidManifest中注册application

    <application android:icon="@drawable/icon1" android:label="@string/app_name" ...