js实例属性和原型属性

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>测试文档</title> 
    <script type="text/javascript">

// 实质上属性和方法是一样的,方法是属性为引用型的函数。 
//一个对象有4种属性: 
//                 1,构造函数通过this关键字定义的属性 
//                 2,构造函数通过var关键字定义的属性 
//                 3,构造函数的原型对象添加的属性 
//                 4,对象动态添加的属性 
//实例的公有属性:1      通过this关键字定义的属性           可访问   1,2,3,4 
//实例的私有属性:2      通过var关键字定义的属性。          可访问   2 
//实例的共享属性:3      通过实例指向的原型添加的属性。      可访问   1,3,4 
//实例的静态属性:4      对象动态添加的属性。               可访问  1,3,4

//总结: 
//     实例属性:1,公有 
//              2,私有 
//              4,静态 
//     原型属性:3,共享

//this定义的为特权属性。全部可访问 
//var定义的为私有属性。 
//动态添加的属性为公有属性。不可访问私有属性

//实例对象指向的原型属性为原型属性。不可访问私有属性,优先级低于公有属性

//实例属性主要有公有属性和特权属性构成。均可被外部和原型属性访问。主要区别在于是否可访问私有属性 
//原型属性优先级低于实例属性。可被外部访问和实例属性访问(除私有属性)

//-----------------此处为分割线----------------------------- 
// 公有属性:对象暴露给外部环境的属性。也是对象的属性。 
// 私有属性:对象内部的属性,往往不可访问.在构造函数层面上考虑才有意义。 
// 静态属性:动态添加的属性。也是对象的属性。 
// 共有属性:所有构造函数生成的实例所共享的属性。

function User(){ 
//           公有属性:每new一个User实例对象,都有的属性。 
//                    为实例属性,所有实例的属性不共享内存。 
//                    外部可访问。 
           this.name=‘byronvis‘; 
//           特权方法:每new一个User实例对象,都有的方法。 
//                    为实例方法,所有实例的方法不共享内存。 
//                    外部可访问。 
//                    可访问公有属性。 
//                    可访问私有属性。 
           this.sayName=function(){ 
            alert(this.name); 
               alert(this.school); 
            alert(age);//变量声明会自动提前。 
            alert(this.sex); 
           }; 
//           私有属性:外部不可访问。 
//                    仅对构造函数有意义,对于new的User实例对象无意义。 
           var age=22; 
//           私有方法:外部不可访问。 
//                    仅对构造函数有意义,对于new的User实例对象无意义。 
           function sayAge(){ 
               alert(age); 
           } 
           sayAge(); 
       } 
//       共有属性: 共享内存。 
       User.prototype.school=‘zky‘; 
//       共有方法:可访问公有属性。 
//                共享内存。 
       User.prototype.saySchool=function(){ 
           alert(this.school); 
           alert(this.name); 
           alert(this.sex); 
           alert(age); 
       }; 
        var obj=new User(); 
//       静态属性:就是动态添加的实例属性。 
        obj.sex=‘man‘; 
//       静态方法:就是动态添加的实例方法。 
        obj.saySex=function(){ 
            alert(this.sex); 
            alert(this.name); 
            alert(this.school); 
            alert(age); 
        }; 
//-----------------此处为分割线----------------------------- 
////      证明this关键字定义的属性和动态添加的属性本质上一样的,都可认为是实例对象的公有属性。 
//       验证: this关键字定义的属性访问动态添加的属性 
//        obj.sayName();//true 
//        验证:动态添加的属性访问this关键字定义的属性 
//        obj.saySex();//true 
//        验证:公有属性访问私有属性 
//        obj.sayName();//true 
           obj.saySex();//false 
//        验证:共享属性访问私有属性 
//        obj.saySchool();//false

</script> 
</head> 
<body> 
    测试文档 
</body> 
</html>

时间: 2024-08-10 14:56:41

js实例属性和原型属性的相关文章

JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

前  言 上一篇博客(https://www.cnblogs.com/qdjianghao/p/10177360.html )中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方法.静态属性/方法.原型属性/方法,并且一起来探讨一下JS中的原型与原型链. 一 成员属性与成员方法 在构造函数中,通过this.属性声明.或者实例化出对象后,通过"对象.属性"追加的.都属于成员属性

【JavaScript错题记录】变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级

原文位置http://caibaojian.com/toutiao/5446 1.所有变量声明(var)或者声明函数都会被提升到当前函数顶部 关于函数表达式,js会将代码拆分为两行代码分别执行.这里需要注意的是 var getName 和 function getName都是声明语句,区别在于var getName是函数表达式,function getName是函数声明,这里使用var进行函数声明和变量声明时一样的,都是声明提前至当前函数最顶部,二函数声明是将函数声明提升至当前函数顶部.(这个有

JS的Object类的属性、方法及如何创建对象

属性 constructor:对创建对象的函数的引用(指针).对于Object类,该指针指向原始的object()函数. prototype:对该对象的对象原型的引用.对于所有的类,它默认返回Object对象的一个实例. 方法 hasOwnProperty(property):判断对象是否有某个特定的属性.必须用字符串指定该属性(例如,o.hasOwnProperty(”name”)). isPrototypeOf(object):判断该对象是否为另一个对象的原型. propertyIsEnum

js中如何判断属性是对象实例中的属性还是原型中的属性

ECMAScript5中的hasOwnProperty()方法,用于判断只在属性存在与对象实例中的时候,返回true,in操作符只要通过对象能访问到属性就返回true. 因此只要in操作符返回true而hasOwnProperty()返回false,就可以确定属性是原型中的属性. 所以有如下函数: function hasPrototypeProperty(obj, name) { return !obj.hasOwnProperty(name) && (name in obj); } 当

关于Javascript中通过实例对象修改原型对象属性值的问题

Javascript中的数据值有两大类:基本类型的数据值和引用类型的数据值. 基本类型的数据值有5种:null.undefined.number.boolean和string. 引用类型的数据值往大的说就1种,即Object类型.往细的说有:Object类型.Array类型.Date类型.Regexp类型.Function类型等. 当原型对象的属性值为基本类型的数据值时,通过实例对象修改属性值从而引起原型对象的属性值发生变化的情况不会发生.当原型对象的属性值为引用类型的数据值时,通过实例对象修改

js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>test</title> 5 </head> 6 <body> 7 <script> 8 //对象构造函数 9 function Atest(name){ 10 //私有属性,只能

函数原型属性-JavaScript深入浅出(三)

前两次总结了JavaScript中的基本数据类型(值类型<引用类型>,引用类型<复杂值>)以及他们在内存中的存储,对内存空间有了一个简单的了解,以及第二次总结了this深入浅出的用法,我们知道了this的用法取决于函数四种调用的方式. 这一次我们来对JavaScript中原型以及原型链做一个深入浅出的理解. JavaScript深入浅出系列 1)复杂值vs原始值&&内存空间 - JavaScript深入浅出(一) 2)this的用法 – JavaScript深入浅出

重写函数对象prototype属性值的不同的情况下实例对象的内部属性Prototype值有所不同

http://www.cnblogs.com/cmptlgg/ 我的博客园 重写函数对象的prototype属性值:会切断实例的[[Prototype]]内部属性和最初函数对象的prototype(原型对象)的联系 这个例子引用js高级第三版: /* 这是高三对此实现的解释. 尽管可以随时为原型添加属性和方法,并且修改能够立即在所有对象实例中反映出来,但如果是重 写整个原型对象,那么情况就不一样了.我们知道,调用构造函数时会为实例添加一个指向最初原型的 [[Prototype]]指针,而把原型修

JS所有内置对象属性和方法汇总

JS三大对象 对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索.发现.征服. 我们都知道,JavaScript有3大对象,分别是本地对象.内置对象和宿主对象. 在此引用ECMA-262(ECMAScript的制定标准)对于他们的定义: 本地对象 与宿主无关,独立于宿主环境的ECMAScript实现提供的对象. 简单来说,本地对象就是 ECMA-262 定义的类(引用类型). 这些引用类型在运行过程中需要通过new来创建所需的实例对象. 包