用了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. wamp 安装redis扩展

    phpredis扩展下载地址  http://windows.php.net/downloads/pecl/snaps/redis/ 1.选择redis DLL文件扩展 phpinfo 查看VC版本 ...

  2. windows 查询端口占用 杀掉进程

    参考 https://www.cnblogs.com/lynn-li/p/6077993.html netstat -ano | findstr "8001" taskkill / ...

  3. as2.0 清除主时间轴上所有的影片简介

    for (var i in _root) { if (typeof _root[i] == "movieclip") { _root[i].swapDepths(1); _root ...

  4. Python hash() 函数

    Python hash() 函数  Python 内置函数 描述 hash() 用于获取取一个对象(字符串或者数值等)的哈希值. 语法 hash 语法: hash(object) 参数说明: obje ...

  5. centos6与centos7区别

    CentOS 6 vs CentOS 7的不同   (1)桌面系统[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x(GNOME Shell) (2)文件系统[CentOS6 ...

  6. Python+Selenium学习--操作测试对象

    场景 前面已经讲解了如果定位对象,定位之后需要对这个对象进行操作.是鼠标点击还是键盘输入,取决于我们定位的对象缩支持的操作. webdriver中比较常用的操作元素的方法有下面几个: clear    ...

  7. Watcher、ZK状态、事件类型 ,权限

    zookeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher. 同样,其watcher是监听数据发送了某些变化,那就一定 ...

  8. YYKit @autoreleasepool 使用,优化内存

    写在前面 最近再看YY大神的YYKit工具,发现在代码中经常使用@autoreleasepool,特别是在与for循环搭配使用的时候.刚开始很不能理解. 先有个概念: 自己创建的对象:使用 alloc ...

  9. vue 路由参数变化,页面不更新的问题

    监控$route 在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,如果不监听路由参数值的变化,页面无数据刷新,需手动刷新浏览器,这样做就不是我们的预期效果. 举例:当前路由为  /p ...

  10. TZOJ 1705 Dining(拆点最大流)

    描述 Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wil ...