javascript第六章
1、理解对象
属性类型:(大多数情况下不用高级)
configurable:是否可以删除属性,是否修改属性的特性,能否把属性修改为访问其属性。默认为true;
enumerable:能否通过for-in循环返回属性。默认为true;
writable:是否可以修改属性,默认为true。
value:属性被读取或写入的值都在value里查看。默认为undefined
writable
var person={ };
Object.definePropery(person,"name",{
writable:false,
value:"meimei"
});
alert(person.name); //meimei
person.name="geg"; //修改属性
alert(person.name); //meimei 属性值没被改变
configurable
var person={};
Object.definePropety(person,"name",{
configurable:false,
value:"lele"
});
alert(person.name); //lele
delete person.name; //删除属性 费严格模式下什么都不会发生,但是在严格模式下会抛出异常
alert(person.name); //lele configurable:false; 顒属性不能被删除
//一旦属性定义为不可配置的,就不能把它变为可配置得了,再调用Object.defineProperty方法修改除writable以外的特性,都会导致错误。
var person={};
Object.definePropety(person,"name",{
configurable:false,
value:"lele"
});
//抛出异常
var person={};
Object.definePropety(person,"name",{
configurable:true,
value:"lele"
});
工厂模式
function a(name,age,job){
var person=new Object();
person.name=name;
person.age=age;
person.job=job ;
person.sayname=function (){
alert(this.name);
}
return person;
}
var persn2=a("qq",21,"software");
var person3=a("ww",23,"enginner");
this.sayname=function (){
alert(this.name);
}
alert(person1.constructor==person); //true
当做构造函数使用
var person=new Person("ff",11,"ww");
person.sayname(); //ff
作为普通函数使用
person(“rew”,22,"ggg");
window.sayname(); //rew
在另一个对象的作用域中调用
var o=new Object();
person.call(o,“rew”,22,"ggg"); //通过call()方法,将原本属于对象person的方法交给d对象o使用。
o.sayname(); //rew
原型模式
person(){}
person.prototype.name="lele";
person.prototype.age=12;
person.prototype.job="start";
person.prototype.sayName=function(){
alert(this.name);
}
var person1=new Person();
person1.sayName(); //"lele"
var person2=new Person();
person2.sayName(); //"lele"
alert(person1.sayName==person2.sayName); //true
isPrototypeOf()
alert(person.prototype.isPrototypeOf(person1)); //true
alert(Object.getPrototypeOf(person1)==person.prototype); //true 原型
alert(Object.getPrototypeOf(person1).name); //"lele" 访问原型的属性
var person3=new person();
person3.name="mingming";
alert(person3.name); //"mingming" 来自实例
alert(“”name“ in person3) //true name属性来自实例 无论name属性来自原型还是对象实例都返回true
delete person3.name;
alert(person3.name); //"lele" 来自原型
alet("name" in person3) //true 无论name属性来自原型还是对象实例都返回true
hasOwnPrototype()检测一个属性是否来自实例
person1.hasOwnPrototype("name"); //false 因为来自原型
person1.name="qqqqq";
person1.hasOwnPrototype("name"); //true 来自实例
var person6=new person();
alert(qq(person6,"name")); //true 存在原型中
var person7=new person();
person.name="fvfv";
alert(qq(person7,"name")); //false 存在实例中
获取对象上所有可枚举的实例属性
alert(person.edition); 2
}
var person1=creatrperson("qq",12,"engineer");
var person2=creatrperson("ww",43,"engineer2");
构造函数模式(没创建对象,直接将属性和方法赋给了this,没return返回值)
}
var person1=new creatrperson("qq",12,"engineer");
person1.sayname(); //qq
var person2=new creatrperson("ww",43,"engineer2");
alert(person1.constructor==person) //true person1、person2分别保存着person的一个不同的实例,这两个对象都有一个constructor属性,该属性指向person
aler(person1 instanceof person); //true
aler(person1 instanceof Object); //true
不同实例上的同名函数是不相等的
alert(person.sayname=person2.sayname) //false
function person(name,age,job){
this.name=name;
this.age=age;
thia.job=job;
this.sayname=sayname; //讲say那么属性设置成等于全局的sayname函数
}
function sayname(){
alert( this.name);
}
var person1=new person("ee",90,"enginner");
原型模式
function Person(){ };
Persnn.prototype.name="fd";
Persnn.prototype.job="enginner";
Persnn.prototype.age=32;
alert(Object.getPrototype(person1)==Person.prototype) //true
alert(Object.getPrototype(person1).name); //"fd"
person3=new Person();
person3.name="meimei";
alert(person3.name); //"meimei" //在实例中创建的属性会屏蔽原型中对应的属性
delete person3.name;
alert(person3.name); //"fd" 删除实例中的属性后恢复对原型中属性的连接
检测一个属性是存在于实例中 不存在于原型中
function Person(){ };
Persnn.prototype.name="fd";
Persnn.prototype.job="enginner";
Persnn.prototype.age=32;
person2.sayName(); //"fd"
alert(person1.hasOwnProperty("name")); //false 来自原型
person2.name="yue"
alert(person2.hasOwnProperty("name")); //true 来自实例
确定属性存在与对象中,不存在于原型中。
function yuanXingZhong(object,name){
return !object.hasOwnProperty(name)&&(name in object);
}
var person1=new Person();
alert(yuanXingZhong(person1,name)); //true
var person2=new Person();
person2.name="oo";
alert(yuanXingZhong(person2,name)); //false
获取对象上所有可枚举的属性
function Person(){ };
Persnn.prototype.name="fd";
Persnn.prototype.job="enginner";
Persnn.prototype.age=32;
var keys= Object.key(Person.prototype);
alert(keys); //"name","job","sayName","age" 返回可枚举数组
var p1=new Person();
p1.name="rob";
p1.age=32;
var p1keys=Object.key(p1);
alert(p1keys); //name,age
function Person(){ }
通过原生对象的原型,还可以定义新方法
function Person(name,age,job){
this.name=name;
this.age=age;
thia.job=job;
this.friend=["aa","ss"];
}
Person.prototype={
alert(color.toPipedString()); //"red|blue|green"
javascript第六章相关推荐
- Javascript第六章JavaScript字面量加数组创建对象第三课
Javascript第六章JavaScript用new创建对象第一课 https://blog.csdn.net/qq_30225725/article/details/89304586 Javasc ...
- Javascript第六章JavaScript中构造器创建对象第二课
Javascript第六章JavaScript用new创建对象第一课 https://blog.csdn.net/qq_30225725/article/details/89304586 Javasc ...
- Javascript第六章JavaScript用new创建对象第一课
Javascript第六章JavaScript用new创建对象第一课 https://blog.csdn.net/qq_30225725/article/details/89304586 Javasc ...
- Javascript第六章基本包装类型第八课
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- Javascript第六章世上最全常用RegExp正则表达式及表单验证源码第七课
元字符: 很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下.给自己留个底,也给朋友们 ...
- Javascript第六章计时器练习【源码】第四课
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- Javascript第六章闭包closure规则第三课
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- Javascript第六章基本数据类型和引用数据类型第三课
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- Javascript第六章prototype原型向构造器中添加属性,实现构造器共享,节约空间第五课
/*function Student(name,age){this.name=name;this.age=age;this.show=function(){console.log("我是一个 ...
最新文章
- idea java jni 调试_IntelliJ IDEA平台下JNI编程(一)—HelloWorld篇
- 享元模式 FlyWeight 结构型 设计模式(十五)
- h5的语义化部分_H5 部分新语义化标签
- shell-1-命令与参数
- android高仿微信UI点击头像显示大图片效果
- 13.1.2 WEB应用程序
- linux git还原文件,Gitlab备份到windows、在Linux恢复
- [C++ Primer] 第2章: 变量
- java strim性能_Java代码性能优化总结
- 静态HTML模板渲染
- ft232r usb uart驱动_构建基于USB的高精度温度传感器电路
- ChartControl控件绘制柱状图
- LabVIEW在快速传输速率下丢失UDP数据包
- 黑白或彩色线稿地图设计定制装饰画中线条轮廓素材底图获取方法合集
- 如何快速实现直播美颜功能 - 接入美颜SDK详解
- 遇见的网易云评论整理(持续更新)
- 格拉姆矩阵(Gram matrix)详细解读
- 假如用VIVO手机拍照,这几个功能一定要打开,效果媲美单反
- 微信开发工具BUG(漏洞),魔法加法
- jmeter连接数据库查询获取多个参数, 并通过参数化传值,实现jmeter造数
热门文章
- C++ 编程基础练习——贴现分期贷款问题
- 【matplotlib】条形图及垂线显示小技巧 |一些有用参考帖子收集
- 电脑上安装VMware及centos系统
- matlab 细化 去环,Matlab的memory模块消除代数环
- 从小白到高手,你需要理解同步与异步(内含10张图)
- 华为云EI工业智能体2.0,让工业“Know How”开口说话
- 重装系统——win10
- “好评返现”违法,有商家被罚,双11剁手党们坐不住了
- 卡兹莫机器人报价_超级机器人大战MX隐藏机体入手方法
- 【Hadoop】hive2.1在hadoop2.7.3中的可执行java代码