原型属性方法访问

对实例中属性或者方法的访问时,先从实例的对象中寻找,如果不存在则在原型中寻找。

所以:如果原型中有某个属性,在实例对象中在重写则会隐藏原型的属性访问。

function Person(){}

Person.prototype.name = "Jack";

Person.prototype.sayName = function(){

  alert(this.name);

}

var p1 = new Person();

alert(p1.hasownProperty("name")); //false  hasownProperty方法是判断实例中是否存在此属性

alert("name" in p1);  //true  in操作符是判断实例和原型中是否存在此属性

p1.name = "Tom";

alert(p1.name) // Tom 隐藏了原型的属性

delete p1.name;

alert(p1.name); //Jack

但是如果重写了prototype 则会破坏原有的搜索方式

比如:

Person.prototype = {

  name : "Jack",

  sayName : function (){

     alert(this.name);

  }

}

var p1 = new Person();

p1.sayName() //error 

此时则会报错,因为原型链被破话,搜索不到原型的sayName方法了。

时间: 2024-08-05 12:21:23

原型属性方法访问的相关文章

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

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

javascript的oop——>>> [__proto__ 与 prototype/原型链/原型属性与原型方法/for-in循环]

  前  言  OOP  javascript的oop中的__proto__  与  prototype/原型链/原型属性与原型方法/for-in循环 1  __proto__  与  prototype/原型链   1.prototype(函数的原型):函数才有prototype.prototype是一个对象,指向了当前构造函数的引用地址呢.                       2.__proto__(对象的原型对象):所有对象都要__proto__属性.当用构造函数实例化(new)一

JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)

第一种:对象冒充 function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.color); }; } function ClassB(sColor, sName) { this.newMethod = ClassA; this.newMethod(sColor); delete this.newMethod; this.name = sName; this.sayName = f

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

__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

javascript的基础知识及面向对象和原型属性

自己总结一下javascript的基础知识,希望对大家有用,也希望大家来拍砖,毕竟是个人的理解啊 1.1 类型检查:typeof(验证数据类型是:string) var num = 123; console.log(typeof num); // 1.2 in 运算符 作用:判断指定属性是否存在于指定的对象中. 如果指定的属性存在于指定的对象中,则 in 运算符会返回 true. 语法: 属性 in 对象 返回值:true 或者 false 示例: var obj = { age: 18 };

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

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

javascript对象的属性,方法,prototype作用范围分析

读了篇博客感觉很有用"javascript对象的属性,方法,prototype作用范围分析"就自己写了一遍.以后自己可以用的到. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://

js的函数4中属性方法

私有方法:私有方法本身是可以访问类内部的所有属性的,即私有属性和公有属性.但是私有方法是不可以在类的外部被调用. 公有方法: 1.公有方法是可以在类的外部被调用的, 2.但是它不可以访问类的私有属性. 3.公有方法必须在类的内部或者外部通过类的prototype属性添加. 特权方法: 1.特权方法是可以在类的外部被调用的, 2.但是它可以访问类的私有属性,并且也是可以访问类的公有属性,可以勉强的认为它是一种特殊的公有方法. 3.但是它与上面的公有方法的声明与定义方式不同.特权方法必须在类的内部声