说地图中的默认键是什么意思?

时间:2015-12-30 18:51:32

标签: javascript javascript-objects

Here,它说,一个Object有一个原型,因此地图中有默认键。但是,可以使用map = Object.create(null)

绕过此功能

我无法理解map = Object.create(null)的含义。

1)将map.__proto__设置为null是什么意思?

2)在上一段中,地图的默认键是什么意思?

3)这些默认密钥如何与具有原型的Object相关?

2 个答案:

答案 0 :(得分:2)

  

在上一段中,地图的默认键是什么意思?

您可以将对象用作字符串到值的映射。例如:

var map = {};
map["foo"] = "pizza";
map["year"] = 2001;

您可能希望映射最初为空。也就是说,对于任何key值,您希望表达式map[key]返回undefined,因为您还没有设置任何值。但是,对于普通对象,map["toString"]具有值!这与我们对最后一句的期望相矛盾,我们期望任何 map[key]值为undefined。这就是文档所指的"默认键" - 某些键已经填充了值,即使您没有设置它们。

  

这些默认密钥如何与具有原型的对象相关?

这是因为对象从Object.prototype继承了一些属性。 JavaScript中的所有对象(或几乎所有对象)都有原型。如果您向某个对象询问某个属性,并且该对象没有该属性,那么它将检查其原型是否具有该值。在toString案例中,我们使用map = {}创建的新对象并不具有自己的toString属性,但其原型Object.prototype确实具有名为toString的属性。因此,当您向对象实例请求名为toString的属性时,您将从原型中获取toString属性。

  

map.__proto__设置为null是什么意思?

这里的解决方案是创建一个根本没有原型的对象。也就是说,一个原型为null的对象。我们可以使用Object.create(null)执行此操作。

在这种情况下,当我们执行map = Object.create(null)然后请求map["toString"]时,我们确实得到undefined,因为null - 原型map没有&# 39;有一个原型来从。

获得继承的toString属性

答案 1 :(得分:0)

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="bs-example">
    <div class="table-responsive"> 
        <table class="table table-bordered">
            <colgroup>
                <col class="con1" style="align: center; width: 30%" />
                <col class="con1" style="align: center; width: 20%" />
                <col class="con0" style="align: center; width: 20%" />
                <col class="con1" style="align: center; width: 20%" />
                <col class="con1" style="align: center; width: 10%" />
            </colgroup>           
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Price</th>
                    <th>Quantity</th>
                    <th>Sub Total</th>
                    <th>&nbsp;</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Karpap Pushing Ayu</td>
                    <td class="product_price">5</td>
                    <td><input type="text" name="qty" class="product_qty" value="5"></td>
                    <td class="amount_sub_total">25</td>
                    <td><a href="#" class="delete">x</a></td>
                </tr>
                <tr>
                    <td>Slimming Tea</td>
                    <td class="product_price">25</td>
                    <td><input type="text" name="qty" class="product_qty" value="5"></td>
                    <td class="amount_sub_total">125</td>
                    <td><a href="#" class="delete">x</a></td>
                </tr>
                <tr>
                    <td>Tudung Shawl Butterfly</td>
                    <td class="product_price">15</td>
                    <td><input type="text" name="qty" class="product_qty" value="3"></td>
                    <td class="amount_sub_total">45</td>
                    <td><a href="#" class="delete">x</a></td>
                </tr>
                <tr>
                    <td>Tudung Shawl Butterfly 5</td>
                    <td class="product_price">20</td>
                    <td><input type="text" name="qty" class="product_qty" value="2"></td>
                    <td class="amount_sub_total">40</td>
                    <td><a href="#" class="delete">x</a></td>
                </tr> 

                <tr>
                    <td>Total</td>
                    <td>&nbsp;</td>
                    <td id="total_qty">15</td>
                    <td id="total_amount">235</td>
                    <td>&nbsp;</td>
                </tr> 
                <tr>
                    <td>GST 6 %</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td id="gst_amount">14.1</td>
                    <td>&nbsp;</td>
                </tr> 
                <tr>
                    <td>Discount  (x%)</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td id="discount_amount">&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>   
                <tr>
                    <td>Total Payment</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td id="grand_total">249.1</td>
                    <td>&nbsp;</td>
                </tr> 
                <tr>
                    <td colspan="5" class="checkout"><a href="#">CHECKOUT</a></td>
                </tr>                                             
            </tbody>
        </table>
    </div>
</div>

表示创建一个空对象,甚至不能从map = Object.create(null). 获取属性。

如果你试过

Object.prototype它将返回null。