1+ < script type ="text/javascript ">
2+
3+ 'use strict'
4+
5+ var obj1 = new Object ( ) ;
6+ var obj2 = { } ;
7+
8+ console . log ( Object . getPrototypeOf ( obj1 ) === Object . prototype ) ; // 输出:true
9+ console . log ( Object . getPrototypeOf ( obj2 ) === Object . prototype ) ; // 输出:true
10+
11+
12+ //再来看看如何用new 运算符从构造器中得到一个对象,下面的代码我们再熟悉不过了:
13+ function Person ( name ) {
14+ this . name = name ;
15+ } ;
16+
17+ Person . prototype . getName = function ( ) {
18+ return this . name ;
19+ } ;
20+
21+ var a = new Person ( 'sven' )
22+ console . log ( a . name ) ; // 输出:sven
23+ console . log ( a . getName ( ) ) ; // 输出:sven
24+ console . log ( Object . getPrototypeOf ( a ) === Person . prototype ) ; // 输出:true
25+
26+ //在Chrome 和Firefox 等向外暴露了对象__proto__属性的浏览器下,我们可以通过下面这段代码来理解new 运算的过程:
27+ function Person ( name ) {
28+ this . name = name ;
29+ } ;
30+
31+ Person . prototype . getName = function ( ) {
32+ return this . name ;
33+ } ;
34+
35+ var objectFactory = function ( ) {
36+ var obj = new Object ( ) , // 从Object.prototype 上克隆一个空的对象
37+ Constructor = [ ] . shift . call ( arguments ) ; // 取得外部传入的构造器,此例是Person
38+ obj . __proto__ = Constructor . prototype ; // 指向正确的原型
39+ var ret = Constructor . apply ( obj , arguments ) ; // 借用外部传入的构造器给obj 设置属性
40+ return typeof ret === 'object' ? ret : obj ; // 确保构造器总是会返回一个对象
41+ } ;
42+
43+ var a = objectFactory ( Person , 'sven' ) ;
44+
45+ console . log ( a . name ) ; // 输出:sven
46+ console . log ( a . getName ( ) ) ; // 输出:sven
47+ console . log ( Object . getPrototypeOf ( a ) === Person . prototype ) ; // 输出:true
48+
49+
50+ //下面的代码是我们最常用的原型继承方式:
51+
52+ var obj = { name : 'sven' } ;
53+ var A = function ( ) { } ;
54+ A . prototype = obj ;
55+ var a = new A ( ) ;
56+ console . log ( a . name ) ; // 输出:sven
57+
58+ //当我们期望得到一个“类”继承自另外一个“类”的效果时,往往会用下面的代码来模拟实现:
59+ var A = function ( ) { } ;
60+ A . prototype = { name : 'sven' } ;
61+ var B = function ( ) { } ;
62+ B . prototype = new A ( ) ;
63+ var b = new B ( ) ;
64+ console . log ( b . name ) ; // 输出:sven
65+
66+ //通过Class 创建对象的一段简单示例代码①如下所示 :
67+ class Animal {
68+ constructor ( name ) {
69+ this . name = name ;
70+ }
71+
72+ getName ( ) {
73+ return this . name ;
74+ }
75+ }
76+
77+ class Dog extends Animal {
78+ constructor ( name ) {
79+ super ( name ) ;
80+ }
81+ speak ( ) {
82+ return "woof" ;
83+ }
84+ }
85+
86+ var dog = new Dog ( "Scamp" ) ;
87+ console . log ( dog . getName ( ) + ' says ' + dog . speak ( ) ) ;
88+
89+ </ script >
0 commit comments