有关js原型的系列方法
来源:互联网 发布:玩数码频道淘宝店铺 编辑:程序博客网 时间:2024/06/15 14:35
最近一直在看js原型,书上讲了好多方法,总是弄混淆了,这里做一个解释总结,也算对自己学习的一种巩固
检测类方法
1.hasOwnProperty()方法
作用: 检测一个属性存在于对象实例还是原型中
返回值: 对象实例(true),原型(false)
function Person(age){ this.age = age;}Person.prototype.name = "ys";var p1 = new Person();console.log(p1.hasOwnProperty("name")); //falseconsole.log(p1.hasOwnProperty("age")); //true
2.in 操作符
作用:检测一个属性是否存在,不管存在于原型还是对象实例
返回值: 有则(true),无则(false),不管属性的位置
function Person(age){ this.age = age;}Person.prototype.name = "ys";var p1 = new Person();console.log("name" in p1); //trueconsole.log("age" in p1); //trueconsole.log("sex" in p1); //false
利用这两个方法结合,可以确定该属性的位置(对象实例,或者原型)
/* * 判断属性是存在于对象还是原型 * * object -> 对象 name -> 要判断的属性 * 存在于原型中,返回true 存在于对象实例中返回false * * */ function hasPrototypeProperty(object, name){ return !object.hasOwnProperty(name) && (name in object); }
3.isPrototypeOf()方法
作用:用来判断当前对象是否在传入的参数对象的原型链上
返回值: 在(true),不在(false)
function Person(age){ this.age = age;}var p = new Person(123);console.log(Object.prototype.isPrototypeOf(p));//trueconsole.log(Person.prototype.isPrototypeOf(p));//true
4.propertyIsEnumerable()方法
作用:用来检测属性(必须为实例属性,原型属性不行)是否可以在某个对象被for…in枚举
返回值: 可枚举(true),不可枚举(false)
function Person(age){ this.age = age;}Person.prototype.name = "ys";var p1 = new Person('123');console.log(p1.propertyIsEnumerable('age')); //trueconsole.log(p1.propertyIsEnumerable('name')); //false,在原型中 for(var i in p1){ console.log(i); //age,name}
5.javascript中,有两种属性
- 数据属性:js对象属性(平日我们用到的)
var a = { name: 'ys', age: 12}
数据属性4个特征描述值
[[Configurable]]:该特性表示是否可以通过delete操作符来删除属性,默认值是true。[[Enumerable]]:表示是否能够通过for…in语句来枚举出属性,默认是true[[Writable]]:表示属性值是否可以修改,默认为true[[Value]]:表示属性的值,默认为undefined
defineProperty()方法修改特征
var obj = { name: 'aa'};console.log(obj.name); //aaObject.defineProperty(obj, 'name', { value: 'ys', writable: false});obj.name = 'cc';console.log(obj.name); //ys
访问器属性
[[Configurable]]:该特性表示是否可以通过delete操作符来删除属性,默认值是true。[[Enumerable]]:表示是否能够通过for…in语句来枚举出属性,默认是true[[Get]]:读取属性时调用的函数,默认是undefined[[Set]]:设置属性时调用的函数,默认是undefined
var person = { name: 'ys', _age: 12};Object.defineProperty(person, 'age', { get: function(){ return this._age; }, //val 为传入的age值 set: function(val){ this._age = val; //通过name修改age值 this.name = val > 20 ? 'abc' : 'ys'; }})console.log(person.name); //ysperson.age = 22;console.log(person.name); //abc
用到set,get函数时候,当对象不具有指定的属性名称时,发生此操作
0 0
- 有关js原型的系列方法
- js的原型实例prototype--方法--属性,构造,赋值--方法同样有原型--原型含义
- js正则表达式有关的各种方法
- js与date有关的方法
- js类方法,对象方法,原型的理解
- 有关JS中构造函数和原型函数的一些基础知识
- Js的Array对象的几个原型方法
- JS中的phototype JS的三种方法(类方法、对象方法、原型方法)
- js-静态、原型、实例方法
- js构造函数,工厂方法,以及原型设计的特性
- JS原型链(子类调用父类的方法)
- js原型里的默认属性和方法
- js构造函数的方法与原型prototype
- 关于js原型和继承的方法复习
- js的原型继承
- JS的原型链
- js原型的重写
- js 原型的思考
- 【LeetCode】299 Bulls and Cows
- 文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计
- Contains Duplicate II
- 在Xib中运用Runtime给View加圆角
- C语言读取指定行文本
- 有关js原型的系列方法
- GitLab在windows用户端的使用教程
- 粘贴图片到Word中只显示一点点显示不全就只有一半截—————很用偶,在我迷惑的时候
- 您真的理解了SQLSERVER的日志链了吗
- 设置文件及文件夹的默认图标排列方式
- AndroidStudio学习之旅(一)
- mysql中用户权限导出的脚本
- HDU 1243反恐训练营(最长公共子序列)
- 6 Java基础 多态