`
weigang.gao
  • 浏览: 468781 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

更简单的原型语法(5.2.1)

 
阅读更多

更简单的原型语法的做法是用一个包含所有属性和方法的对象字面量来重写整个原型对象

<script type="text/javascript"> 
  
   function Person(){}
   
   //原型中的constructor属性指向Object对象,而不是指向Person函数的
   Person.prototype = {
	  name : '彭传志',
	  age : 29
   };
   
   //使用这种简单的原型语法,原型中的constructor已经不再指向Person函数了,而是指向Object构造函数
   alert(Person.prototype.constructor == Object);//true
   //使用这种简单的原型语法,原型中的constructor已经不再指向Person函数了
   alert(Person.prototype.constructor == Person);//false
   //原型对象prototype中有个"__proto__"属性,该属性指向另一个原型对象,该对象中有个constructor属性,该属性指向Object
   alert(Person.prototype.__proto__.constructor == Person.prototype.constructor);//true
   alert(Person.prototype.__proto__.constructor == Person.prototype);//false
   alert(Person.prototype.__proto__.constructor == Object);//true
	 
</script>

       

       2.在上面的代码中,我们将Person.prototype设置为等于一个以对象字面量形式创建的新对象。最终结果相同,但有一个例外:constructor属性不在指向Person了。我们知道,每创建一个函数,就会同时创建它的prototype对象,这个对象也会自动获得constructor属性。而我们在这里使用的语法,本质上完全重写了默认的prototype对象,因此constructor属性页就变成了新对象constructor属性,指向Object构造函数,不再Person构造函数。

<script type="text/javascript"> 
	  
	   function Person(){}
	   
	   //原型中的constructor属性指向Object对象,而不是指向Person函数的
	   /*
	   Person.prototype = {
	      name : '彭传志',
		  age : 29
	   };
	  */
	  var person1 = new Person();

          alert(Person.prototype.constructor == Object);//false
	  alert(Person.prototype.constructor == Person);//true
	  alert(Person.prototype.__proto__.constructor == Person.prototype.constructor);//false
	  alert(Person.prototype.__proto__.constructor == Person.prototype);//false
	  alert(Person.prototype.__proto__.constructor == Object);//true
	     
</script>

 

 思考:

<script type="text/javascript"> 
	   function Person(){
	   }
	   var person1 = new Person();
	   person1.age = 26;
      
	   //Person.prototype.constructor上有name属性,而且是只读的,不能修改值
	   var descriptorName = Object.getOwnPropertyDescriptor(Person.prototype.constructor, 'name');
	   alert(descriptorName.writable);//false
	  
	   
	   //constructor上是否可以添加属性??可以
	   Person.prototype.constructor.nameboss = "高伟刚";
	   alert(person1.__proto__.constructor.nameboss);//"高伟刚", constructor同样可以定义对象属性
	   alert(person1.nameboss);//undefined
	   
	   //在原型(prototype)的原型(__proto__)上添加属性name
	   Person.prototype.__proto__.name = '小杰';
	   alert(person1.name);//"小杰"
	   
	   alert("__proto__" in Person.prototype.__proto__);//true
	   alert(Person.prototype.__proto__.__proto__);//null, 说明有这个属性,属性的值为null
	  
       alert(person1.__proto__.constructor == Person);//true
	   //constructor对象有没有"__proto__"属性?? 有
	   alert(Person.prototype.constructor.__proto__.constructor == Object);//false
	   alert(Person.prototype.constructor.__proto__.constructor == Function)//true
	   alert(Person.prototype.constructor.__proto__);//function Empty(){}
	   alert(Person.prototype.constructor.__proto__.constructor);//function Function(){[native code]}
	   alert(Person.prototype.constructor.__proto__.constructor.__proto__)//function Empty(){}
	   alert(Person.prototype.constructor.__proto__.constructor.__proto__.constructor);//function Function(){[native code]}
	   //无线循环
	 
</script>

 

分享到:
评论

相关推荐

    ECMAScript 2018快速入门 高清完整PDF

    5.2.1数据类型 42 5.2.2数组缓冲区 43 5.2.3数据视图 43 5.2.4类型化数组即视图 45 5.2.5类型化数组与数组的主要区别 45 5.3小结 46 第6章对象 47 6.1属性简写 47 6.2方法简写 47 6.3未定的属性名和方法名 48 6.4新...

    Thinking in Java 中文第四版+习题答案

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写样式...

    Think in Java(中文版)chm格式

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 ...

    JAVA_Thinking in Java

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    Java初学者入门教学

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    ThinkInJava

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    java 编程入门思考

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    thinkinjava

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    Thinking in Java简体中文(全)

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    java联想(中文)

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    SQL Server 2008数据库设计与实现

     6.2.3 基于简单表达式的CHECK约束  6.2.4 基于函数的CHECK约束  6.2.5 约束引起的错误  6.2.6 DML触发器  6.2.7 处理来自触发器和约束的错误  6.3 手动数据保护  6.4 更多最佳实践  6.5 总结 第7章...

    JavaScript详解(第2版)

     5.2.1 算术运算符   5.2.2 快捷赋值运算符   5.2.3 递增运算符和递减运算符   5.2.4 拼接运算符   5.2.5 比较运算符   5.2.6 逻辑运算符   5.2.7 条件运算符   5.2.8 位运算符   5.3 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写...

    Node.js MongoDB AngularJSWeb开发中文版.part1

    2.7.3 使用原型对象模式 24 2.8 处理字符串 25 2.8.1 合并字符串 26 2.8.2 在字符串中搜索子串 26 2.8.3 在一个字符串中替换单词 27 2.8.4 将字符串分割成数组 27 2.9 使用数组 27 2.9.1 合并数组 28 2.9.2 遍历数组...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     6.4.2 字符串模板: 更简单的替代品   6.4.3 原始字符串操作符(r/r)   6.4.4 unicode字符串操作符(u/u)   6.5 内建函数   6.5.1 标准类型函数   6.5.2 序列类型函数   6.5.3 字符串类型函数...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

     6.4.2 字符串模板: 更简单的替代品   6.4.3 原始字符串操作符(r/r)   6.4.4 unicode字符串操作符(u/u)   6.5 内建函数   6.5.1 标准类型函数   6.5.2 序列类型函数   6.5.3 字符串类型函数...

    VBScript介绍手册

    3.2.4 相关语句的语法 3.3 综合例子 第4章 VBScript的函数 4.1 VBScript函数综述 4.1.1 数据类型判断 4.1.2 格式化函数 4.1.3 数据类型转换函数 4.1.4 数学运算函数 4.1.4 日期时间处理函数 4.1.5 字符串处理函数 ...

    Python核心编程第二版(ok)

     6.4.2 字符串模板c更简单的替代品   6.4.3 原始字符串操作符(rR)   6.4.4 Unicode字符串操作符(uU)   6.5 内建函数   6.5.1 标准类型函数   6.5.2 序列类型函数   6.5.3 字符串类型函数  ...

    Python核心编程第二版

     6.4.2 字符串模板: 更简单的替代品   6.4.3 原始字符串操作符(r/R)   6.4.4 Unicode字符串操作符(u/U)   6.5 内建函数   6.5.1 标准类型函数   6.5.2 序列类型函数   6.5.3 字符串类型函数...

Global site tag (gtag.js) - Google Analytics